mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-24 09:28:38 -06:00
Compare commits
1 Commits
f99aebf437
...
4274913c1e
Author | SHA1 | Date | |
---|---|---|---|
![]() |
4274913c1e |
@ -1,9 +1,7 @@
|
|||||||
from django.contrib.contenttypes.models import ContentType, ContentTypeManager
|
from django.contrib.contenttypes.models import ContentType, ContentTypeManager
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
|
|
||||||
from netbox.plugins import PluginConfig
|
|
||||||
from netbox.registry import registry
|
from netbox.registry import registry
|
||||||
from utilities.string import title
|
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'ObjectType',
|
'ObjectType',
|
||||||
@ -50,29 +48,3 @@ class ObjectType(ContentType):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
proxy = True
|
proxy = True
|
||||||
|
|
||||||
@property
|
|
||||||
def app_labeled_name(self):
|
|
||||||
# Override ContentType's "app | model" representation style.
|
|
||||||
return f"{self.app_verbose_name} > {title(self.model_verbose_name)}"
|
|
||||||
|
|
||||||
@property
|
|
||||||
def app_verbose_name(self):
|
|
||||||
if model := self.model_class():
|
|
||||||
return model._meta.app_config.verbose_name
|
|
||||||
|
|
||||||
@property
|
|
||||||
def model_verbose_name(self):
|
|
||||||
if model := self.model_class():
|
|
||||||
return model._meta.verbose_name
|
|
||||||
|
|
||||||
@property
|
|
||||||
def model_verbose_name_plural(self):
|
|
||||||
if model := self.model_class():
|
|
||||||
return model._meta.verbose_name_plural
|
|
||||||
|
|
||||||
@property
|
|
||||||
def is_plugin_model(self):
|
|
||||||
if not (model := self.model_class()):
|
|
||||||
return # Return null if model class is invalid
|
|
||||||
return isinstance(model._meta.app_config, PluginConfig)
|
|
||||||
|
@ -1507,7 +1507,7 @@ class InterfaceFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm):
|
|||||||
tx_power = forms.IntegerField(
|
tx_power = forms.IntegerField(
|
||||||
required=False,
|
required=False,
|
||||||
label=_('Transmit power (dBm)'),
|
label=_('Transmit power (dBm)'),
|
||||||
min_value=-40,
|
min_value=0,
|
||||||
max_value=127
|
max_value=127
|
||||||
)
|
)
|
||||||
vrf_id = DynamicModelMultipleChoiceField(
|
vrf_id = DynamicModelMultipleChoiceField(
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
import django.core.validators
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('dcim', '0208_platform_manufacturer_uniqueness'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='interface',
|
|
||||||
name='tx_power',
|
|
||||||
field=models.SmallIntegerField(
|
|
||||||
blank=True,
|
|
||||||
null=True,
|
|
||||||
validators=[
|
|
||||||
django.core.validators.MinValueValidator(-40),
|
|
||||||
django.core.validators.MaxValueValidator(127)
|
|
||||||
]
|
|
||||||
),
|
|
||||||
),
|
|
||||||
]
|
|
@ -719,13 +719,10 @@ class Interface(ModularComponentModel, BaseInterface, CabledObjectModel, PathEnd
|
|||||||
verbose_name=('channel width (MHz)'),
|
verbose_name=('channel width (MHz)'),
|
||||||
help_text=_("Populated by selected channel (if set)")
|
help_text=_("Populated by selected channel (if set)")
|
||||||
)
|
)
|
||||||
tx_power = models.SmallIntegerField(
|
tx_power = models.PositiveSmallIntegerField(
|
||||||
blank=True,
|
blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
validators=(
|
validators=(MaxValueValidator(127),),
|
||||||
MinValueValidator(-40),
|
|
||||||
MaxValueValidator(127),
|
|
||||||
),
|
|
||||||
verbose_name=_('transmit power (dBm)')
|
verbose_name=_('transmit power (dBm)')
|
||||||
)
|
)
|
||||||
poe_mode = models.CharField(
|
poe_mode = models.CharField(
|
||||||
|
@ -1,13 +1,7 @@
|
|||||||
import inspect
|
|
||||||
|
|
||||||
from django.urls import NoReverseMatch, reverse
|
|
||||||
from drf_spectacular.types import OpenApiTypes
|
|
||||||
from drf_spectacular.utils import extend_schema_field
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from core.models import ObjectType
|
from core.models import ObjectType
|
||||||
from netbox.api.serializers import BaseModelSerializer
|
from netbox.api.serializers import BaseModelSerializer
|
||||||
from utilities.views import get_viewname
|
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'ObjectTypeSerializer',
|
'ObjectTypeSerializer',
|
||||||
@ -16,32 +10,7 @@ __all__ = (
|
|||||||
|
|
||||||
class ObjectTypeSerializer(BaseModelSerializer):
|
class ObjectTypeSerializer(BaseModelSerializer):
|
||||||
url = serializers.HyperlinkedIdentityField(view_name='extras-api:objecttype-detail')
|
url = serializers.HyperlinkedIdentityField(view_name='extras-api:objecttype-detail')
|
||||||
app_name = serializers.CharField(source='app_verbose_name', read_only=True)
|
|
||||||
model_name = serializers.CharField(source='model_verbose_name', read_only=True)
|
|
||||||
model_name_plural = serializers.CharField(source='model_verbose_name_plural', read_only=True)
|
|
||||||
is_plugin_model = serializers.BooleanField(read_only=True)
|
|
||||||
rest_api_endpoint = serializers.SerializerMethodField()
|
|
||||||
description = serializers.SerializerMethodField()
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ObjectType
|
model = ObjectType
|
||||||
fields = [
|
fields = ['id', 'url', 'display', 'app_label', 'model']
|
||||||
'id', 'url', 'display', 'app_label', 'app_name', 'model', 'model_name', 'model_name_plural',
|
|
||||||
'is_plugin_model', 'rest_api_endpoint', 'description',
|
|
||||||
]
|
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.STR)
|
|
||||||
def get_rest_api_endpoint(self, obj):
|
|
||||||
if not (model := obj.model_class()):
|
|
||||||
return
|
|
||||||
if viewname := get_viewname(model, action='list', rest_api=True):
|
|
||||||
try:
|
|
||||||
return reverse(viewname)
|
|
||||||
except NoReverseMatch:
|
|
||||||
return
|
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.STR)
|
|
||||||
def get_description(self, obj):
|
|
||||||
if not (model := obj.model_class()):
|
|
||||||
return
|
|
||||||
return inspect.getdoc(model)
|
|
||||||
|
Loading…
Reference in New Issue
Block a user