Django ManyToMany встроенный порядок в 1.2.x

Я использую в Django 1.2 новый ManyToMany admin.TabularInline для отображения связанных объектов в приложении администратора, и он прекрасно работает, за исключением того, что я не могу понять, как установить свойство ordering, чтобы оно могло сортироваться по одному из имена полей с перекрестными ссылками.

Например:

class Foo(models.Model):
    name = models.CharField(max_length=100)

class Bar(models.Model):
    title = models.CharField(max_length=100)
    foos = models.ManyToManyField(Foo)

class FooBarInline(admin.TabularInline):
    model = Bar.foos.through
    ordering = ('name', )  # DOES NOT WORK
    raw_id_fields = ('name', )  # THROWS EXCEPTION

class FooAdmin(admin.ModelAdmin):
    inlines = (FooBarInline, )

    class Meta:
        model = Foo

Как я могу добраться до поля Foo.name, чтобы упорядочить его в строке?

2 ответа

Мета-опция упорядочения модели определяет порядок расположения встроенных элементов.

class Foo(models.Model):
    name = models.CharField(max_length=100)

    class Meta:
        ordering = ('name',)

Если вам нужно, чтобы порядок модели администратора отличался от вашего основного порядка, вы можете сделать что-то вроде этого:

class Foo_Extended(Foo):
    class Meta:
        ordering = ('name',)

И используйте Foo_Extended для вашей модели AdminInline.

Я предполагаю, что вы знаете это, но Django 1.3 добавляет и опцию заказа в модель InlineAdmin, но я знаю, что вы сказали, Django 1.2

Я думаю, что вы можете переопределить

ModelAdmin.formfield_for_foreignkey(self, db_field, request, **kwargs)

Вы можете найти подробную информацию в документации для ModelAdmin.formfield_for_foreignkey.

Другие вопросы по тегам