我正在使用Django 1.2的新的ManyToMany admin.TabularInline来显示管理应用程序中的相关对象,并且它工作得很好,除了我无法弄清楚要设置“排序”属性的内容,以便它可以排序其中一个交叉引用的字段名称。
例如:
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字段以按内联订购?
答案 0 :(得分:1)
模型ordering meta option指定内联元素的顺序。
class Foo(models.Model):
name = models.CharField(max_length=100)
class Meta:
ordering = ('name',)
如果您需要将管理模型的排序与主要排序不同,您可以执行以下操作:
class Foo_Extended(Foo):
class Meta:
ordering = ('name',)
并为您的AdminInline模型使用Foo_Extended。
我假设你知道这一点,但是Django 1.3为InlineAdmin模型添加和订购选项,但我知道你说的是Django 1.2
答案 1 :(得分:0)
我想你可以覆盖
ModelAdmin.formfield_for_foreignkey(self, db_field, request, **kwargs)
您可以在ModelAdmin.formfield_for_foreignkey的文档中找到详细信息。