123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- from django import forms
- __all__ = [
- 'ProfileField',
- 'TextProfileField',
- 'UrlProfileField',
- 'TextareaProfileField',
- 'ChoiceProfileField',
- ]
- class ProfileField(object):
- """
- Basic profile field
- """
- fieldname = None
- label = None
- help_text = None
- readonly = False
- 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 get_help_text(self, user):
- return self.help_text
- def get_admin_field(self, user):
- return None
- def clean_admin_form(self, form, data):
- return data
- def admin_update_extra(self, user, cleaned_data):
- if self.readonly:
- return
- user.extra[self.fieldname] = cleaned_data.get(self.fieldname)
- class ChoiceProfileField(ProfileField):
- choices = None
- def get_choices(self, user):
- if not self.choices:
- raise NotImplementedError(
- "profile field ChoiceProfileField has to define "
- "choices attribute or get_choices(user) method"
- )
- return self.choices
- def get_admin_field(self, user):
- return forms.ChoiceField(
- label=self.get_label(user),
- help_text=self.get_help_text(user),
- initial=user.extra.get(self.fieldname),
- choices=self.get_choices(user),
- disabled=self.readonly,
- required=False,
- )
- class TextProfileField(ProfileField):
- def get_admin_field(self, user):
- return forms.CharField(
- label=self.get_label(user),
- help_text=self.get_help_text(user),
- initial=user.extra.get(self.fieldname),
- max_length=250,
- disabled=self.readonly,
- required=False,
- )
- class TextareaProfileField(ProfileField):
- def get_admin_field(self, user):
- return forms.CharField(
- label=self.get_label(user),
- help_text=self.get_help_text(user),
- initial=user.extra.get(self.fieldname),
- max_length=250,
- widget=forms.Textarea(
- attrs={'rows': 4},
- ),
- disabled=self.readonly,
- required=False,
- )
- class SlugProfileField(ProfileField):
- def get_admin_field(self, user):
- return forms.SlugField(
- label=self.get_label(user),
- help_text=self.get_help_text(user),
- initial=user.extra.get(self.fieldname),
- max_length=250,
- disabled=self.readonly,
- required=False,
- )
- class UrlProfileField(ProfileField):
- def get_admin_field(self, user):
- return forms.URLField(
- label=self.get_label(user),
- help_text=self.get_help_text(user),
- initial=user.extra.get(self.fieldname),
- max_length=250,
- disabled=self.readonly,
- required=False,
- )
|