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.