Django admin выбирает порядок, отличный от порядка модели по умолчанию - PullRequest
8 голосов
/ 19 января 2012

У меня есть модель (Node), которая упорядочена по дате в админке, поэтому самые последние узлы показываются первыми.Это нормально.

На ту же модель (узел) ссылается другая модель (устройство).При редактировании устройства есть список узлов (в HTML-выделении), который также упорядочен по дате.Я хотел бы, чтобы этот выбор был упорядочен по имени, а не по дате.

Возможно ли иметь два разных метода упорядочения, один для списка объектов и один для поля выбора?Спасибо.

Ответы [ 3 ]

6 голосов
/ 19 января 2012

Проще всего было бы переопределить метод formfield_for_foreignkey в ModelAdmin для Device, что-то вроде

def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == 'node':
        kwargs['queryset'] = Node.objects.order_by('name')
    return super(DeviceAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

(я предполагаю, что изрядное количествоздесь. Надеюсь, это понятно!)

Точно так же есть formfield_for_manytomany.

2 голосов
/ 19 января 2012

Вы пробовали что-то вроде:

class Node
        name = ...
        date = ...
        fields ....

        class Meta:
            order_with_respect_to='Device'
            ordering = ('Device', 'name')
0 голосов
/ 13 декабря 2016

Вы можете создать пользовательскую форму для DeviceAdmin и установить параметр набора запросов для поля «Узел».

# in models.py we have Device model with Node field
class Device(models.Model):
    node = models.ForeignKey(Node)
    ...

# in admin.py we have DeviceAdmin with custom form
class DeviceAdminForm(forms.ModelForm):
    node = forms.ModelChoiceField(queryset=Node.objects.order_by('name'), label='Node')

    class Meta:
        model = Device

class DeviceAdmin(admin.ModelAdmin):
    form = DeviceAdminForm
...