forms.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. from django import forms
  2. from extras.forms import (
  3. AddRemoveTagsForm, CustomFieldModelForm, CustomFieldBulkEditForm, CustomFieldFilterForm, CustomFieldModelCSVForm,
  4. )
  5. from extras.models import Tag
  6. from utilities.forms import (
  7. BootstrapMixin, CommentField, CSVModelChoiceField, CSVModelForm, DynamicModelChoiceField,
  8. DynamicModelMultipleChoiceField, SlugField, TagFilterField,
  9. )
  10. from .models import Tenant, TenantGroup
  11. #
  12. # Tenant groups
  13. #
  14. class TenantGroupForm(BootstrapMixin, forms.ModelForm):
  15. parent = DynamicModelChoiceField(
  16. queryset=TenantGroup.objects.all(),
  17. required=False
  18. )
  19. slug = SlugField()
  20. class Meta:
  21. model = TenantGroup
  22. fields = [
  23. 'parent', 'name', 'slug', 'description',
  24. ]
  25. class TenantGroupCSVForm(CSVModelForm):
  26. parent = CSVModelChoiceField(
  27. queryset=TenantGroup.objects.all(),
  28. required=False,
  29. to_field_name='name',
  30. help_text='Parent group'
  31. )
  32. slug = SlugField()
  33. class Meta:
  34. model = TenantGroup
  35. fields = TenantGroup.csv_headers
  36. #
  37. # Tenants
  38. #
  39. class TenantForm(BootstrapMixin, CustomFieldModelForm):
  40. slug = SlugField()
  41. group = DynamicModelChoiceField(
  42. queryset=TenantGroup.objects.all(),
  43. required=False
  44. )
  45. comments = CommentField()
  46. tags = DynamicModelMultipleChoiceField(
  47. queryset=Tag.objects.all(),
  48. required=False
  49. )
  50. class Meta:
  51. model = Tenant
  52. fields = (
  53. 'name', 'slug', 'group', 'description', 'comments', 'tags',
  54. )
  55. class TenantCSVForm(CustomFieldModelCSVForm):
  56. slug = SlugField()
  57. group = CSVModelChoiceField(
  58. queryset=TenantGroup.objects.all(),
  59. required=False,
  60. to_field_name='name',
  61. help_text='Assigned group'
  62. )
  63. class Meta:
  64. model = Tenant
  65. fields = Tenant.csv_headers
  66. class TenantBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldBulkEditForm):
  67. pk = forms.ModelMultipleChoiceField(
  68. queryset=Tenant.objects.all(),
  69. widget=forms.MultipleHiddenInput()
  70. )
  71. group = DynamicModelChoiceField(
  72. queryset=TenantGroup.objects.all(),
  73. required=False
  74. )
  75. class Meta:
  76. nullable_fields = [
  77. 'group',
  78. ]
  79. class TenantFilterForm(BootstrapMixin, CustomFieldFilterForm):
  80. model = Tenant
  81. q = forms.CharField(
  82. required=False,
  83. label='Search'
  84. )
  85. group = DynamicModelMultipleChoiceField(
  86. queryset=TenantGroup.objects.all(),
  87. to_field_name='slug',
  88. required=False,
  89. null_option='None'
  90. )
  91. tag = TagFilterField(model)
  92. #
  93. # Form extensions
  94. #
  95. class TenancyForm(forms.Form):
  96. tenant_group = DynamicModelChoiceField(
  97. queryset=TenantGroup.objects.all(),
  98. required=False,
  99. null_option='None',
  100. initial_params={
  101. 'tenants': '$tenant'
  102. }
  103. )
  104. tenant = DynamicModelChoiceField(
  105. queryset=Tenant.objects.all(),
  106. required=False,
  107. query_params={
  108. 'group_id': '$tenant_group'
  109. }
  110. )
  111. class TenancyFilterForm(forms.Form):
  112. tenant_group = DynamicModelMultipleChoiceField(
  113. queryset=TenantGroup.objects.all(),
  114. to_field_name='slug',
  115. required=False,
  116. null_option='None'
  117. )
  118. tenant = DynamicModelMultipleChoiceField(
  119. queryset=Tenant.objects.all(),
  120. to_field_name='slug',
  121. required=False,
  122. null_option='None',
  123. query_params={
  124. 'group': '$tenant_group'
  125. }
  126. )