change ordering field, remove front-end changes

This commit is contained in:
Arthur
2026-01-20 13:45:17 -08:00
parent 5a1282e326
commit c4c3518bb4
5 changed files with 17 additions and 34 deletions

View File

@@ -733,10 +733,9 @@ class ModuleForm(ModuleCommonForm, PrimaryModelForm):
) )
module_bay = DynamicModelChoiceField( module_bay = DynamicModelChoiceField(
label=_('Module bay'), label=_('Module bay'),
queryset=ModuleBay.objects.order_by('name'), queryset=ModuleBay.objects.all(),
query_params={ query_params={
'device_id': '$device', 'device_id': '$device'
'ordering': 'name',
}, },
context={ context={
'disabled': 'installed_module', 'disabled': 'installed_module',

View File

@@ -1273,7 +1273,7 @@ class ModuleBay(ModularComponentModel, TrackingModelMixin, MPTTModel):
verbose_name_plural = _('module bays') verbose_name_plural = _('module bays')
class MPTTMeta: class MPTTMeta:
order_insertion_by = ('module',) order_insertion_by = ('name',)
def clean(self): def clean(self):
super().clean() super().clean()

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -75,15 +75,11 @@ export class DynamicTomSelect extends TomSelect {
load(value: string) { load(value: string) {
const self = this; const self = this;
const currentValue = self.getValue();
// Automatically clear any cached options. (Only options included // Automatically clear any cached options. (Only options included
// in the API response should be present.) // in the API response should be present.)
self.clearOptions(); self.clearOptions();
// Clear user_options to prevent the pre-selected option from being treated specially // Populate the null option (if any) if not searching
(self as any).user_options = {};
if (self.nullOption && !value) { if (self.nullOption && !value) {
self.addOption(self.nullOption); self.addOption(self.nullOption);
} }
@@ -97,33 +93,21 @@ export class DynamicTomSelect extends TomSelect {
addClasses(self.wrapper, self.settings.loadingClass); addClasses(self.wrapper, self.settings.loadingClass);
self.loading++; self.loading++;
// Make the API request
fetch(url) fetch(url)
.then(response => response.json()) .then(response => response.json())
.then(apiData => { .then(apiData => {
const results: Dict[] = apiData.results; const results: Dict[] = apiData.results;
const options: Dict[] = [];
// Add options and set $order to preserve API response order for (const result of results) {
results.forEach((result, index) => {
const option = self.getOptionFromData(result); const option = self.getOptionFromData(result);
self.addOption(option); options.push(option);
const key = option[self.settings.valueField as string] as string;
if (self.options[key]) {
(self.options[key] as any).$order = index;
}
});
if (self.loading > 0) {
self.loading--;
if (self.loading === 0) {
self.wrapper.classList.remove(self.settings.loadingClass as string);
}
} }
return options;
if (currentValue && !self.items.includes(currentValue as string)) { })
self.items.push(currentValue as string); // Pass the options to the callback function
} .then(options => {
self.loadCallback(options, []);
self.refreshOptions(false);
}) })
.catch(() => { .catch(() => {
self.loadCallback([], []); self.loadCallback([], []);