Во-первых, вы установили порядок по умолчанию для вашей модели?Возможно, более разумно установить порядок там, чем в админе.
class Plant(models.Model):
name = models.CharField(max_length=30)
class Meta:
ordering = ['name',]
Если вы хотите изменить порядок в форме, тогда изменение набора запросов вполне допустимо.Обратите внимание, что вам не нужно явно определять поле завода в вашей форме - вы можете изменить набор запросов в вашем __init__
методе.
class IngredientAdminForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(IngredientAdminForm, self).__init__(*args, **kwargs)
self.fields['plant'].queryset = Plant.objects.order_by('name')
class Meta:
model = Ingredient
В админке Django вы на самом деле не имеетеопределить пользовательскую форму модели.Вы можете использовать метод администрирования модели formfield_for_foreignkey
.
class IngredientAdmin(admin.ModelAdmin):
list_display = ('name', 'description', 'plant')
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "plant":
kwargs["queryset"] = Plant.objects.order_by('name')
return db_field.formfield(**kwargs)
return super(IngredientAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)