123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- from django import forms
- class ProfileField(object):
- """
- Basic profile field
- """
- fieldname = None
- label = None
- def get_label(self, user):
- if not self.label:
- raise NotImplementedError(
- "profile field class has to define label "
- "attribute or get_label(user) method"
- )
- return self.label
- def extend_admin_form(self, form, user):
- return form
- class TextProfileField(ProfileField):
- def extend_admin_form(self, form, user):
- fieldname = self.fieldname
- return type('TextProfileFieldForm', (form,), {
- fieldname: self.get_admin_form_field(
- user, fieldname, self.get_label(user)),
- 'clean_{}'.format(fieldname): self.get_admin_form_field_clean(
- user, fieldname),
- })
- def get_admin_form_field(self, user, fieldname, label):
- return forms.CharField(
- label=label,
- initial=user.extra.get(fieldname),
- max_length=250,
- required=False,
- )
- def get_admin_form_field_clean(self, user, fieldname):
- def clean_field(self):
- data = self.cleaned_data.get(fieldname)
- user.extra[fieldname] = data
- return data
- return clean_field
- class TextareaProfileField(TextProfileField):
- pass
|