Преглед изворни кода

Declare TaggableManager on PrimaryModel base class

Jeremy Stretch пре 5 година
родитељ
комит
fc5bb966f0

+ 1 - 4
netbox/circuits/models.py

@@ -1,10 +1,9 @@
 from django.db import models
 from django.urls import reverse
-from taggit.managers import TaggableManager
 
 from dcim.fields import ASNField
 from dcim.models import CableTermination, PathEndpoint
-from extras.models import ObjectChange, TaggedItem
+from extras.models import ObjectChange
 from extras.utils import extras_features
 from netbox.models import BigIDModel, ChangeLoggedModel, OrganizationalModel, PrimaryModel
 from utilities.querysets import RestrictedQuerySet
@@ -60,7 +59,6 @@ class Provider(PrimaryModel):
     comments = models.TextField(
         blank=True
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = RestrictedQuerySet.as_manager()
 
@@ -184,7 +182,6 @@ class Circuit(PrimaryModel):
     )
 
     objects = CircuitQuerySet.as_manager()
-    tags = TaggableManager(through=TaggedItem)
 
     csv_headers = [
         'cid', 'provider', 'type', 'status', 'tenant', 'install_date', 'commit_rate', 'description', 'comments',

+ 0 - 3
netbox/dcim/models/cables.py

@@ -6,13 +6,11 @@ from django.core.exceptions import ObjectDoesNotExist, ValidationError
 from django.db import models
 from django.db.models import Sum
 from django.urls import reverse
-from taggit.managers import TaggableManager
 
 from dcim.choices import *
 from dcim.constants import *
 from dcim.fields import PathField
 from dcim.utils import decompile_path_node, object_to_path_node, path_node_to_object
-from extras.models import TaggedItem
 from extras.utils import extras_features
 from netbox.models import BigIDModel, PrimaryModel
 from utilities.fields import ColorField
@@ -108,7 +106,6 @@ class Cable(PrimaryModel):
         blank=True,
         null=True
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = RestrictedQuerySet.as_manager()
 

+ 0 - 12
netbox/dcim/models/device_components.py

@@ -6,12 +6,10 @@ from django.db import models
 from django.db.models import Sum
 from django.urls import reverse
 from mptt.models import MPTTModel, TreeForeignKey
-from taggit.managers import TaggableManager
 
 from dcim.choices import *
 from dcim.constants import *
 from dcim.fields import MACAddressField
-from extras.models import TaggedItem
 from extras.utils import extras_features
 from netbox.models import PrimaryModel
 from utilities.fields import NaturalOrderingField
@@ -227,7 +225,6 @@ class ConsolePort(ComponentModel, CableTermination, PathEndpoint):
         null=True,
         help_text='Port speed in bits per second'
     )
-    tags = TaggableManager(through=TaggedItem)
 
     csv_headers = ['device', 'name', 'label', 'type', 'speed', 'mark_connected', 'description']
 
@@ -271,7 +268,6 @@ class ConsoleServerPort(ComponentModel, CableTermination, PathEndpoint):
         null=True,
         help_text='Port speed in bits per second'
     )
-    tags = TaggableManager(through=TaggedItem)
 
     csv_headers = ['device', 'name', 'label', 'type', 'speed', 'mark_connected', 'description']
 
@@ -321,7 +317,6 @@ class PowerPort(ComponentModel, CableTermination, PathEndpoint):
         validators=[MinValueValidator(1)],
         help_text="Allocated power draw (watts)"
     )
-    tags = TaggableManager(through=TaggedItem)
 
     csv_headers = [
         'device', 'name', 'label', 'type', 'mark_connected', 'maximum_draw', 'allocated_draw', 'description',
@@ -434,7 +429,6 @@ class PowerOutlet(ComponentModel, CableTermination, PathEndpoint):
         blank=True,
         help_text="Phase (for three-phase feeds)"
     )
-    tags = TaggableManager(through=TaggedItem)
 
     csv_headers = ['device', 'name', 'label', 'type', 'mark_connected', 'power_port', 'feed_leg', 'description']
 
@@ -568,7 +562,6 @@ class Interface(ComponentModel, BaseInterface, CableTermination, PathEndpoint):
         object_id_field='assigned_object_id',
         related_query_name='interface'
     )
-    tags = TaggableManager(through=TaggedItem)
 
     csv_headers = [
         'device', 'name', 'label', 'parent', 'lag', 'type', 'enabled', 'mark_connected', 'mac_address', 'mtu',
@@ -705,7 +698,6 @@ class FrontPort(ComponentModel, CableTermination):
             MaxValueValidator(REARPORT_POSITIONS_MAX)
         ]
     )
-    tags = TaggableManager(through=TaggedItem)
 
     csv_headers = [
         'device', 'name', 'label', 'type', 'mark_connected', 'rear_port', 'rear_port_position', 'description',
@@ -766,7 +758,6 @@ class RearPort(ComponentModel, CableTermination):
             MaxValueValidator(REARPORT_POSITIONS_MAX)
         ]
     )
-    tags = TaggableManager(through=TaggedItem)
 
     csv_headers = ['device', 'name', 'label', 'type', 'mark_connected', 'positions', 'description']
 
@@ -816,7 +807,6 @@ class DeviceBay(ComponentModel):
         blank=True,
         null=True
     )
-    tags = TaggableManager(through=TaggedItem)
 
     csv_headers = ['device', 'name', 'label', 'installed_device', 'description']
 
@@ -909,8 +899,6 @@ class InventoryItem(MPTTModel, ComponentModel):
         help_text='This item was automatically discovered'
     )
 
-    tags = TaggableManager(through=TaggedItem)
-
     objects = TreeManager()
 
     csv_headers = [

+ 1 - 5
netbox/dcim/models/devices.py

@@ -9,11 +9,10 @@ from django.db import models
 from django.db.models import F, ProtectedError
 from django.urls import reverse
 from django.utils.safestring import mark_safe
-from taggit.managers import TaggableManager
 
 from dcim.choices import *
 from dcim.constants import *
-from extras.models import ConfigContextModel, TaggedItem
+from extras.models import ConfigContextModel
 from extras.querysets import ConfigContextModelQuerySet
 from extras.utils import extras_features
 from netbox.models import OrganizationalModel, PrimaryModel
@@ -136,7 +135,6 @@ class DeviceType(PrimaryModel):
     comments = models.TextField(
         blank=True
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = RestrictedQuerySet.as_manager()
 
@@ -601,7 +599,6 @@ class Device(PrimaryModel, ConfigContextModel):
         object_id_field='assigned_object_id',
         related_query_name='device'
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = ConfigContextModelQuerySet.as_manager()
 
@@ -916,7 +913,6 @@ class VirtualChassis(PrimaryModel):
         max_length=30,
         blank=True
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = RestrictedQuerySet.as_manager()
 

+ 0 - 4
netbox/dcim/models/power.py

@@ -2,11 +2,9 @@ from django.core.exceptions import ValidationError
 from django.core.validators import MaxValueValidator, MinValueValidator
 from django.db import models
 from django.urls import reverse
-from taggit.managers import TaggableManager
 
 from dcim.choices import *
 from dcim.constants import *
-from extras.models import TaggedItem
 from extras.utils import extras_features
 from netbox.models import PrimaryModel
 from utilities.querysets import RestrictedQuerySet
@@ -41,7 +39,6 @@ class PowerPanel(PrimaryModel):
     name = models.CharField(
         max_length=100
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = RestrictedQuerySet.as_manager()
 
@@ -133,7 +130,6 @@ class PowerFeed(PrimaryModel, PathEndpoint, CableTermination):
     comments = models.TextField(
         blank=True
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = RestrictedQuerySet.as_manager()
 

+ 0 - 4
netbox/dcim/models/racks.py

@@ -11,12 +11,10 @@ from django.db import models
 from django.db.models import Count, Sum
 from django.urls import reverse
 from mptt.models import TreeForeignKey
-from taggit.managers import TaggableManager
 
 from dcim.choices import *
 from dcim.constants import *
 from dcim.elevations import RackElevationSVG
-from extras.models import TaggedItem
 from extras.utils import extras_features
 from netbox.models import NestedGroupModel, OrganizationalModel, PrimaryModel
 from utilities.choices import ColorChoices
@@ -251,7 +249,6 @@ class Rack(PrimaryModel):
     images = GenericRelation(
         to='extras.ImageAttachment'
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = RestrictedQuerySet.as_manager()
 
@@ -558,7 +555,6 @@ class RackReservation(PrimaryModel):
     description = models.CharField(
         max_length=200
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = RestrictedQuerySet.as_manager()
 

+ 0 - 3
netbox/dcim/models/sites.py

@@ -2,13 +2,11 @@ from django.contrib.contenttypes.fields import GenericRelation
 from django.db import models
 from django.urls import reverse
 from mptt.models import TreeForeignKey
-from taggit.managers import TaggableManager
 from timezone_field import TimeZoneField
 
 from dcim.choices import *
 from dcim.constants import *
 from dcim.fields import ASNField
-from extras.models import TaggedItem
 from extras.utils import extras_features
 from netbox.models import NestedGroupModel, PrimaryModel
 from utilities.fields import NaturalOrderingField
@@ -232,7 +230,6 @@ class Site(PrimaryModel):
     images = GenericRelation(
         to='extras.ImageAttachment'
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = RestrictedQuerySet.as_manager()
 

+ 0 - 5
netbox/ipam/models/ip.py

@@ -6,10 +6,8 @@ from django.core.exceptions import ValidationError
 from django.db import models
 from django.db.models import F
 from django.urls import reverse
-from taggit.managers import TaggableManager
 
 from dcim.models import Device
-from extras.models import TaggedItem
 from extras.utils import extras_features
 from netbox.models import OrganizationalModel, PrimaryModel
 from ipam.choices import *
@@ -107,7 +105,6 @@ class Aggregate(PrimaryModel):
         max_length=200,
         blank=True
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = RestrictedQuerySet.as_manager()
 
@@ -292,7 +289,6 @@ class Prefix(PrimaryModel):
         max_length=200,
         blank=True
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = PrefixQuerySet.as_manager()
 
@@ -564,7 +560,6 @@ class IPAddress(PrimaryModel):
         max_length=200,
         blank=True
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = IPAddressManager()
 

+ 0 - 3
netbox/ipam/models/services.py

@@ -3,9 +3,7 @@ from django.core.exceptions import ValidationError
 from django.core.validators import MaxValueValidator, MinValueValidator
 from django.db import models
 from django.urls import reverse
-from taggit.managers import TaggableManager
 
-from extras.models import TaggedItem
 from extras.utils import extras_features
 from ipam.choices import *
 from ipam.constants import *
@@ -66,7 +64,6 @@ class Service(PrimaryModel):
         max_length=200,
         blank=True
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = RestrictedQuerySet.as_manager()
 

+ 0 - 3
netbox/ipam/models/vlans.py

@@ -2,10 +2,8 @@ from django.core.exceptions import ValidationError
 from django.core.validators import MaxValueValidator, MinValueValidator
 from django.db import models
 from django.urls import reverse
-from taggit.managers import TaggableManager
 
 from dcim.models import Interface
-from extras.models import TaggedItem
 from extras.utils import extras_features
 from ipam.choices import *
 from ipam.constants import *
@@ -135,7 +133,6 @@ class VLAN(PrimaryModel):
         max_length=200,
         blank=True
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = RestrictedQuerySet.as_manager()
 

+ 0 - 4
netbox/ipam/models/vrfs.py

@@ -1,8 +1,6 @@
 from django.db import models
 from django.urls import reverse
-from taggit.managers import TaggableManager
 
-from extras.models import TaggedItem
 from extras.utils import extras_features
 from ipam.constants import *
 from netbox.models import PrimaryModel
@@ -59,7 +57,6 @@ class VRF(PrimaryModel):
         related_name='exporting_vrfs',
         blank=True
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = RestrictedQuerySet.as_manager()
 
@@ -116,7 +113,6 @@ class RouteTarget(PrimaryModel):
         blank=True,
         null=True
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = RestrictedQuerySet.as_manager()
 

+ 2 - 2
netbox/netbox/models.py

@@ -5,6 +5,7 @@ from django.core.serializers.json import DjangoJSONEncoder
 from django.core.validators import ValidationError
 from django.db import models
 from mptt.models import MPTTModel, TreeForeignKey
+from taggit.managers import TaggableManager
 
 from extras.choices import ObjectChangeActionChoices
 from utilities.mptt import TreeManager
@@ -148,8 +149,7 @@ class PrimaryModel(ChangeLoggingMixin, CustomFieldsMixin, BigIDModel):
     """
     Primary models represent real objects within the infrastructure being modeled.
     """
-    # TODO
-    # tags = TaggableManager(through=TaggedItem)
+    tags = TaggableManager(through='extras.TaggedItem')
 
     class Meta:
         abstract = True

+ 0 - 3
netbox/secrets/models.py

@@ -12,9 +12,7 @@ from django.core.exceptions import ValidationError
 from django.db import models
 from django.urls import reverse
 from django.utils.encoding import force_bytes
-from taggit.managers import TaggableManager
 
-from extras.models import TaggedItem
 from extras.utils import extras_features
 from netbox.models import BigIDModel, OrganizationalModel, PrimaryModel
 from utilities.querysets import RestrictedQuerySet
@@ -312,7 +310,6 @@ class Secret(PrimaryModel):
         max_length=128,
         editable=False
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = RestrictedQuerySet.as_manager()
 

+ 0 - 3
netbox/tenancy/models.py

@@ -1,9 +1,7 @@
 from django.db import models
 from django.urls import reverse
 from mptt.models import MPTTModel, TreeForeignKey
-from taggit.managers import TaggableManager
 
-from extras.models import TaggedItem
 from extras.utils import extras_features
 from netbox.models import NestedGroupModel, PrimaryModel
 from utilities.mptt import TreeManager
@@ -89,7 +87,6 @@ class Tenant(PrimaryModel):
     comments = models.TextField(
         blank=True
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = RestrictedQuerySet.as_manager()
 

+ 6 - 0
netbox/virtualization/migrations/0020_standardize_models.py

@@ -1,4 +1,5 @@
 import django.core.serializers.json
+import taggit.managers
 from django.db import migrations, models
 
 
@@ -59,4 +60,9 @@ class Migration(migrations.Migration):
             name='custom_field_data',
             field=models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder),
         ),
+        migrations.AlterField(
+            model_name='vminterface',
+            name='tags',
+            field=taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag'),
+        ),
     ]

+ 1 - 8
netbox/virtualization/models.py

@@ -3,10 +3,9 @@ from django.contrib.contenttypes.fields import GenericRelation
 from django.core.exceptions import ValidationError
 from django.db import models
 from django.urls import reverse
-from taggit.managers import TaggableManager
 
 from dcim.models import BaseInterface, Device
-from extras.models import ConfigContextModel, TaggedItem
+from extras.models import ConfigContextModel
 from extras.querysets import ConfigContextModelQuerySet
 from extras.utils import extras_features
 from netbox.models import OrganizationalModel, PrimaryModel
@@ -154,7 +153,6 @@ class Cluster(PrimaryModel):
     comments = models.TextField(
         blank=True
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = RestrictedQuerySet.as_manager()
 
@@ -281,7 +279,6 @@ class VirtualMachine(PrimaryModel, ConfigContextModel):
         object_id_field='assigned_object_id',
         related_query_name='virtual_machine'
     )
-    tags = TaggableManager(through=TaggedItem)
 
     objects = ConfigContextModelQuerySet.as_manager()
 
@@ -412,10 +409,6 @@ class VMInterface(PrimaryModel, BaseInterface):
         object_id_field='assigned_object_id',
         related_query_name='vminterface'
     )
-    tags = TaggableManager(
-        through=TaggedItem,
-        related_name='vminterface'
-    )
 
     objects = RestrictedQuerySet.as_manager()