forms.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from django import forms
  2. from django.db.models import Count
  3. from extras.forms import CustomFieldForm, CustomFieldBulkEditForm, CustomFieldFilterForm
  4. from utilities.forms import BootstrapMixin, BulkImportForm, CommentField, CSVDataField, FilterChoiceField, SlugField
  5. from .models import Tenant, TenantGroup
  6. #
  7. # Tenant groups
  8. #
  9. class TenantGroupForm(BootstrapMixin, forms.ModelForm):
  10. slug = SlugField()
  11. class Meta:
  12. model = TenantGroup
  13. fields = ['name', 'slug']
  14. #
  15. # Tenants
  16. #
  17. class TenantForm(BootstrapMixin, CustomFieldForm):
  18. slug = SlugField()
  19. comments = CommentField()
  20. class Meta:
  21. model = Tenant
  22. fields = ['name', 'slug', 'group', 'description', 'comments']
  23. class TenantFromCSVForm(forms.ModelForm):
  24. group = forms.ModelChoiceField(TenantGroup.objects.all(), required=False, to_field_name='name',
  25. error_messages={'invalid_choice': 'Group not found.'})
  26. class Meta:
  27. model = Tenant
  28. fields = ['name', 'slug', 'group', 'description']
  29. class TenantImportForm(BootstrapMixin, BulkImportForm):
  30. csv = CSVDataField(csv_form=TenantFromCSVForm)
  31. class TenantBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm):
  32. pk = forms.ModelMultipleChoiceField(queryset=Tenant.objects.all(), widget=forms.MultipleHiddenInput)
  33. group = forms.ModelChoiceField(queryset=TenantGroup.objects.all(), required=False)
  34. class Meta:
  35. nullable_fields = ['group']
  36. class TenantFilterForm(BootstrapMixin, CustomFieldFilterForm):
  37. model = Tenant
  38. q = forms.CharField(required=False, label='Search')
  39. group = FilterChoiceField(queryset=TenantGroup.objects.annotate(filter_count=Count('tenants')),
  40. to_field_name='slug', null_option=(0, 'None'))