object_create.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. from django import forms
  2. from dcim.choices import InterfaceModeChoices
  3. from dcim.forms.common import InterfaceCommonForm
  4. from extras.forms import CustomFieldsMixin
  5. from extras.models import Tag
  6. from ipam.models import VLAN
  7. from utilities.forms import (
  8. add_blank_choice, BootstrapMixin, DynamicModelChoiceField, DynamicModelMultipleChoiceField, ExpandableNameField,
  9. StaticSelect,
  10. )
  11. from virtualization.models import VMInterface, VirtualMachine
  12. __all__ = (
  13. 'VMInterfaceCreateForm',
  14. )
  15. class VMInterfaceCreateForm(BootstrapMixin, CustomFieldsMixin, InterfaceCommonForm):
  16. model = VMInterface
  17. virtual_machine = DynamicModelChoiceField(
  18. queryset=VirtualMachine.objects.all()
  19. )
  20. name_pattern = ExpandableNameField(
  21. label='Name'
  22. )
  23. enabled = forms.BooleanField(
  24. required=False,
  25. initial=True
  26. )
  27. parent = DynamicModelChoiceField(
  28. queryset=VMInterface.objects.all(),
  29. required=False,
  30. query_params={
  31. 'virtual_machine_id': '$virtual_machine',
  32. }
  33. )
  34. bridge = DynamicModelChoiceField(
  35. queryset=VMInterface.objects.all(),
  36. required=False,
  37. query_params={
  38. 'virtual_machine_id': '$virtual_machine',
  39. }
  40. )
  41. mac_address = forms.CharField(
  42. required=False,
  43. label='MAC Address'
  44. )
  45. description = forms.CharField(
  46. max_length=200,
  47. required=False
  48. )
  49. mode = forms.ChoiceField(
  50. choices=add_blank_choice(InterfaceModeChoices),
  51. required=False,
  52. widget=StaticSelect(),
  53. )
  54. untagged_vlan = DynamicModelChoiceField(
  55. queryset=VLAN.objects.all(),
  56. required=False
  57. )
  58. tagged_vlans = DynamicModelMultipleChoiceField(
  59. queryset=VLAN.objects.all(),
  60. required=False
  61. )
  62. tags = DynamicModelMultipleChoiceField(
  63. queryset=Tag.objects.all(),
  64. required=False
  65. )
  66. field_order = (
  67. 'virtual_machine', 'name_pattern', 'enabled', 'parent', 'bridge', 'mtu', 'mac_address', 'description', 'mode',
  68. 'untagged_vlan', 'tagged_vlans', 'tags'
  69. )
  70. def __init__(self, *args, **kwargs):
  71. super().__init__(*args, **kwargs)
  72. vm_id = self.initial.get('virtual_machine') or self.data.get('virtual_machine')
  73. # Limit VLAN choices by virtual machine
  74. self.fields['untagged_vlan'].widget.add_query_param('available_on_virtualmachine', vm_id)
  75. self.fields['tagged_vlans'].widget.add_query_param('available_on_virtualmachine', vm_id)