Files
kasu/src/mahjong_ranking/forms.py

79 lines
2.7 KiB
Python

# -*- encoding: utf-8 -*-
"""
Created on 04.10.2011
@author: christian
"""
from django import forms
from django.contrib.auth import get_user_model
from django.utils.translation import ugettext as _
from events.models import Event
from . import models
USER_MODEL = get_user_model()
class HanchanForm(forms.ModelForm):
""" Form to add/edit mahjong hanchans, grouped with formsets. """
error_css_class = 'error'
required_css_class = 'required'
start = forms.SplitDateTimeField(label=_('start'), required=True)
class Meta(object):
""" Medadata for better usability of the HanchanForm """
model = models.Hanchan
fields = ('start',
'player1', 'player1_input_score',
'player2', 'player2_input_score',
'player3', 'player3_input_score',
'player4', 'player4_input_score',
'comment')
widgets = {
'event': forms.HiddenInput(),
'comment': forms.widgets.Textarea(attrs={'rows': 4, 'cols': 40})
}
def __init__(self, *args, **kwargs):
""" Overwrites some standard widgets for better usability. """
super(HanchanForm, self).__init__(*args, **kwargs)
player_queryset = USER_MODEL.objects.filter(
is_active=True,
membership=True)
for i in range(1, 4):
player = 'player%d' % i
player_input_score = 'player%d_input_score' % i
self.fields[player_input_score].widget.attrs['size'] = 6
self.fields[player_input_score].widget.attrs['type'] = 'number'
self.fields[player].queryset = player_queryset
def is_valid(self):
ret = forms.Form.is_valid(self)
for field, errors in self.errors.items():
message = ", ".join(set(errors))
print(type(field), type(errors))
self.fields[field].widget.attrs.update({
'class': self.fields[field].widget.attrs.get('class', '') + ' error',
'title': message
})
return ret
class HanchanAdminForm(HanchanForm):
""" Extends the HanchanForm for users with admin privileges.
They are allowed to confirm/unconfirm Hanchans, this could be userful if
one games smells fishy and needs the opinion of an referee."""
class Meta(object):
""" Extend the formfields to add the confirmed checkbox. """
model = models.Hanchan
fields = HanchanForm.Meta.fields + ('confirmed',)
HanchanFormset = forms.inlineformset_factory(Event, models.Hanchan,
form=HanchanForm,
extra=1,
can_delete=True)