mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-26 09:16:10 -06:00
Merge branch 'develop' into 10201-cable-terminations2
This commit is contained in:
commit
a98984cf9d
@ -65,6 +65,14 @@ Email is sent from NetBox only for critical events or if configured for [logging
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## ENABLE_LOCALIZATION
|
||||||
|
|
||||||
|
Default: False
|
||||||
|
|
||||||
|
Determines if localization features are enabled or not. This should only be enabled for development or testing purposes as netbox is not yet fully localized. Turning this on will localize numeric and date formats (overriding what is set for DATE_FORMAT) based on the browser locale as well as translate certain strings from third party modules.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## HTTP_PROXIES
|
## HTTP_PROXIES
|
||||||
|
|
||||||
Default: None
|
Default: None
|
||||||
|
@ -6,9 +6,14 @@
|
|||||||
|
|
||||||
* [#9285](https://github.com/netbox-community/netbox/issues/9285) - Enable specifying assigned component during bulk import of inventory items
|
* [#9285](https://github.com/netbox-community/netbox/issues/9285) - Enable specifying assigned component during bulk import of inventory items
|
||||||
* [#10700](https://github.com/netbox-community/netbox/issues/10700) - Match device name when using modules quick search
|
* [#10700](https://github.com/netbox-community/netbox/issues/10700) - Match device name when using modules quick search
|
||||||
|
* [#11121](https://github.com/netbox-community/netbox/issues/11121) - Add VM resource totals to cluster view
|
||||||
|
* [#11223](https://github.com/netbox-community/netbox/issues/11223) - `reindex` management command should accept app label without model name
|
||||||
|
* [#11244](https://github.com/netbox-community/netbox/issues/11244) - Add controls for saved filters to rack elevations list
|
||||||
|
* [#11248](https://github.com/netbox-community/netbox/issues/11248) - Fix database migration when plugin with search indexer is enabled
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
|
* [#11280](https://github.com/netbox-community/netbox/issues/11280) - Fix errant newlines when exporting interfaces with multiple IP addresses assigned
|
||||||
* [#11290](https://github.com/netbox-community/netbox/issues/11290) - Correct reporting of scheduled job duration
|
* [#11290](https://github.com/netbox-community/netbox/issues/11290) - Correct reporting of scheduled job duration
|
||||||
* [#11232](https://github.com/netbox-community/netbox/issues/11232) - Enable partial & regular expression matching for non-string types in global search
|
* [#11232](https://github.com/netbox-community/netbox/issues/11232) - Enable partial & regular expression matching for non-string types in global search
|
||||||
|
|
||||||
|
@ -691,6 +691,7 @@ class RackElevationListView(generic.ObjectListView):
|
|||||||
'sort_choices': ORDERING_CHOICES,
|
'sort_choices': ORDERING_CHOICES,
|
||||||
'rack_face': rack_face,
|
'rack_face': rack_face,
|
||||||
'filter_form': forms.RackElevationFilterForm(request.GET),
|
'filter_form': forms.RackElevationFilterForm(request.GET),
|
||||||
|
'model': self.queryset.model,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +32,6 @@ class CustomFieldForm(BootstrapMixin, forms.ModelForm):
|
|||||||
content_types = ContentTypeMultipleChoiceField(
|
content_types = ContentTypeMultipleChoiceField(
|
||||||
queryset=ContentType.objects.all(),
|
queryset=ContentType.objects.all(),
|
||||||
limit_choices_to=FeatureQuery('custom_fields'),
|
limit_choices_to=FeatureQuery('custom_fields'),
|
||||||
label=_('Model(s)')
|
|
||||||
)
|
)
|
||||||
object_type = ContentTypeChoiceField(
|
object_type = ContentTypeChoiceField(
|
||||||
queryset=ContentType.objects.all(),
|
queryset=ContentType.objects.all(),
|
||||||
|
@ -27,17 +27,28 @@ class Command(BaseCommand):
|
|||||||
# Return only indexers for the specified models
|
# Return only indexers for the specified models
|
||||||
else:
|
else:
|
||||||
for label in model_names:
|
for label in model_names:
|
||||||
try:
|
labels = label.lower().split('.')
|
||||||
app_label, model_name = label.lower().split('.')
|
|
||||||
except ValueError:
|
# Label specifies an exact model
|
||||||
|
if len(labels) == 2:
|
||||||
|
app_label, model_name = labels
|
||||||
|
try:
|
||||||
|
idx = registry['search'][f'{app_label}.{model_name}']
|
||||||
|
indexers[idx.model] = idx
|
||||||
|
except KeyError:
|
||||||
|
raise CommandError(f"No indexer registered for {label}")
|
||||||
|
|
||||||
|
# Label specifies all the models of an app
|
||||||
|
elif len(labels) == 1:
|
||||||
|
app_label = labels[0] + '.'
|
||||||
|
for indexer_label, idx in registry['search'].items():
|
||||||
|
if indexer_label.startswith(app_label):
|
||||||
|
indexers[idx.model] = idx
|
||||||
|
|
||||||
|
else:
|
||||||
raise CommandError(
|
raise CommandError(
|
||||||
f"Invalid model: {label}. Model names must be in the format <app_label>.<model_name>."
|
f"Invalid model: {label}. Model names must be in the format <app_label> or <app_label>.<model_name>."
|
||||||
)
|
)
|
||||||
try:
|
|
||||||
idx = registry['search'][f'{app_label}.{model_name}']
|
|
||||||
indexers[idx.model] = idx
|
|
||||||
except KeyError:
|
|
||||||
raise CommandError(f"No indexer registered for {label}")
|
|
||||||
|
|
||||||
return indexers
|
return indexers
|
||||||
|
|
||||||
|
@ -10,7 +10,16 @@ from django.db import migrations, models
|
|||||||
def reindex(apps, schema_editor):
|
def reindex(apps, schema_editor):
|
||||||
# Build the search index (except during tests)
|
# Build the search index (except during tests)
|
||||||
if 'test' not in sys.argv:
|
if 'test' not in sys.argv:
|
||||||
management.call_command('reindex')
|
management.call_command(
|
||||||
|
'reindex',
|
||||||
|
'circuits',
|
||||||
|
'dcim',
|
||||||
|
'extras',
|
||||||
|
'ipam',
|
||||||
|
'tenancy',
|
||||||
|
'virtualization',
|
||||||
|
'wireless',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
@ -222,6 +222,9 @@ SESSION_COOKIE_NAME = 'sessionid'
|
|||||||
# database access.) Note that the user as which NetBox runs must have read and write permissions to this path.
|
# database access.) Note that the user as which NetBox runs must have read and write permissions to this path.
|
||||||
SESSION_FILE_PATH = None
|
SESSION_FILE_PATH = None
|
||||||
|
|
||||||
|
# Localization
|
||||||
|
ENABLE_LOCALIZATION = False
|
||||||
|
|
||||||
# Time zone (default: UTC)
|
# Time zone (default: UTC)
|
||||||
TIME_ZONE = 'UTC'
|
TIME_ZONE = 'UTC'
|
||||||
|
|
||||||
|
@ -137,6 +137,7 @@ STORAGE_BACKEND = getattr(configuration, 'STORAGE_BACKEND', None)
|
|||||||
STORAGE_CONFIG = getattr(configuration, 'STORAGE_CONFIG', {})
|
STORAGE_CONFIG = getattr(configuration, 'STORAGE_CONFIG', {})
|
||||||
TIME_FORMAT = getattr(configuration, 'TIME_FORMAT', 'g:i a')
|
TIME_FORMAT = getattr(configuration, 'TIME_FORMAT', 'g:i a')
|
||||||
TIME_ZONE = getattr(configuration, 'TIME_ZONE', 'UTC')
|
TIME_ZONE = getattr(configuration, 'TIME_ZONE', 'UTC')
|
||||||
|
ENABLE_LOCALIZATION = getattr(configuration, 'ENABLE_LOCALIZATION', False)
|
||||||
|
|
||||||
# Check for hard-coded dynamic config parameters
|
# Check for hard-coded dynamic config parameters
|
||||||
for param in PARAMS:
|
for param in PARAMS:
|
||||||
@ -356,6 +357,9 @@ MIDDLEWARE = [
|
|||||||
'django_prometheus.middleware.PrometheusAfterMiddleware',
|
'django_prometheus.middleware.PrometheusAfterMiddleware',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if not ENABLE_LOCALIZATION:
|
||||||
|
MIDDLEWARE.remove("django.middleware.locale.LocaleMiddleware")
|
||||||
|
|
||||||
ROOT_URLCONF = 'netbox.urls'
|
ROOT_URLCONF = 'netbox.urls'
|
||||||
|
|
||||||
TEMPLATES_DIR = BASE_DIR + '/templates'
|
TEMPLATES_DIR = BASE_DIR + '/templates'
|
||||||
@ -651,6 +655,13 @@ RQ_QUEUES.update({
|
|||||||
queue: RQ_PARAMS for queue in set(QUEUE_MAPPINGS.values()) if queue not in RQ_QUEUES
|
queue: RQ_PARAMS for queue in set(QUEUE_MAPPINGS.values()) if queue not in RQ_QUEUES
|
||||||
})
|
})
|
||||||
|
|
||||||
|
#
|
||||||
|
# Localization
|
||||||
|
#
|
||||||
|
|
||||||
|
if not ENABLE_LOCALIZATION:
|
||||||
|
USE_I18N = False
|
||||||
|
USE_L10N = False
|
||||||
|
|
||||||
#
|
#
|
||||||
# Plugins
|
# Plugins
|
||||||
|
@ -35,6 +35,10 @@
|
|||||||
{% block content-wrapper %}
|
{% block content-wrapper %}
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
|
|
||||||
|
{% if filter_form %}
|
||||||
|
{% applied_filters model filter_form request.GET %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{# Rack elevations #}
|
{# Rack elevations #}
|
||||||
<div class="tab-pane show active" id="object-list" role="tabpanel" aria-labelledby="object-list-tab">
|
<div class="tab-pane show active" id="object-list" role="tabpanel" aria-labelledby="object-list-tab">
|
||||||
{% if page %}
|
{% if page %}
|
||||||
|
Loading…
Reference in New Issue
Block a user