base.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from django import forms
  2. class ProfileField(object):
  3. """
  4. Basic profile field
  5. """
  6. fieldname = None
  7. label = None
  8. readonly = False
  9. def get_label(self, user):
  10. if not self.label:
  11. raise NotImplementedError(
  12. "profile field class has to define label "
  13. "attribute or get_label(user) method"
  14. )
  15. return self.label
  16. def get_admin_field(self, user):
  17. return None
  18. def clean_admin_form(self, form, data):
  19. return data
  20. def admin_update_extra(self, user, cleaned_data):
  21. if self.readonly:
  22. return
  23. user.extra[self.fieldname] = cleaned_data.get(self.fieldname)
  24. class TextProfileField(ProfileField):
  25. def get_admin_field(self, user):
  26. return forms.CharField(
  27. label=self.get_label(user),
  28. initial=user.extra.get(self.fieldname),
  29. max_length=250,
  30. required=False,
  31. )
  32. class TextareaProfileField(TextProfileField):
  33. def get_admin_field(self, user):
  34. return forms.CharField(
  35. label=self.get_label(user),
  36. initial=user.extra.get(self.fieldname),
  37. max_length=250,
  38. widget=forms.Textarea(
  39. attrs={'rows': 4},
  40. ),
  41. required=False,
  42. )