Django ManyToMany встроенный порядок в 1.2.x - PullRequest
1 голос
/ 12 ноября 2010

Я использую новый 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 ]

1 голос
/ 12 мая 2011

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

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

0 голосов
/ 27 мая 2011

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

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

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

...