ticket.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from datetime import timedelta
  2. from django import forms
  3. from django.contrib.auth.models import Group
  4. from django.utils import timezone
  5. from tickets.models import Ticket, TicketList
  6. class TicketForm(forms.ModelForm):
  7. ticket_type = forms.ChoiceField(
  8. choices=Ticket.TICKET_TYPES,
  9. widget=forms.Select(attrs={
  10. 'class': 'form-control'
  11. }),
  12. )
  13. def __init__(self, user, *args, **kwargs):
  14. super().__init__(*args, **kwargs)
  15. group_ids = Group.objects.values_list("pk", flat=True)
  16. if not user.is_superuser:
  17. group_ids = group_ids.filter(user=user)
  18. ticket_lists = TicketList.objects.select_related("group")
  19. ticket_lists = ticket_lists.filter(group__in=group_ids)
  20. self.fields["ticket_list"].empty_label = None
  21. self.fields["ticket_list"].queryset = ticket_lists
  22. self.fields["ticket_list"].label_from_instance = lambda obj: f"{obj.group} > {obj}"
  23. self.fields["assigned_to"].empty_label = "Select a user"
  24. self.initial["due_date"] = (timezone.now() + timedelta(days=7)).date().strftime('%Y-%m-%d')
  25. class Meta:
  26. model = Ticket
  27. exclude = ["status"]
  28. widgets = {
  29. 'title': forms.TextInput(attrs={
  30. 'class': 'form-control',
  31. 'autofocus': True,
  32. }),
  33. 'ticket_list': forms.Select(attrs={
  34. 'class': 'form-control'
  35. }),
  36. 'ticket_type': forms.Select(attrs={
  37. 'class': 'form-control',
  38. }),
  39. 'due_date': forms.DateInput(attrs={
  40. 'class': 'form-control',
  41. 'type': 'date'
  42. }),
  43. 'assigned_to': forms.Select(attrs={
  44. 'class': 'form-control'
  45. }),
  46. 'note': forms.Textarea(attrs={
  47. 'class': 'form-control',
  48. 'rows': 4
  49. }),
  50. 'priority': forms.NumberInput(attrs={
  51. 'class': 'form-control',
  52. }),
  53. }