1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Closes #14153: Filter ContentTypes by supported feature (#14191)

* WIP

* Remove FeatureQuery

* Standardize use of proxy ContentType for models

* Remove TODO

* Correctly filter BookmarksWidget object_types choices

* Add feature-specific object type validation
This commit is contained in:
Jeremy Stretch
2023-11-16 12:12:51 -05:00
committed by GitHub
parent 69a4c31072
commit e15647a2ce
30 changed files with 152 additions and 142 deletions

View File

@@ -1,10 +1,11 @@
from django.conf import settings
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ValidationError
from django.db import models
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from core.models import ContentType
from extras.choices import *
from ..querysets import ObjectChangeQuerySet
@@ -48,7 +49,7 @@ class ObjectChange(models.Model):
choices=ObjectChangeActionChoices
)
changed_object_type = models.ForeignKey(
to=ContentType,
to='contenttypes.ContentType',
on_delete=models.PROTECT,
related_name='+'
)
@@ -58,7 +59,7 @@ class ObjectChange(models.Model):
fk_field='changed_object_id'
)
related_object_type = models.ForeignKey(
to=ContentType,
to='contenttypes.ContentType',
on_delete=models.PROTECT,
related_name='+',
blank=True,
@@ -104,6 +105,17 @@ class ObjectChange(models.Model):
self.user_name
)
def clean(self):
super().clean()
# Validate the assigned object type
if self.changed_object_type not in ContentType.objects.with_feature('change_logging'):
raise ValidationError(
_("Change logging is not supported for this object type ({type}).").format(
type=self.changed_object_type
)
)
def save(self, *args, **kwargs):
# Record the user's name and the object's representation as static strings