Django 1.2.x 中 ManyToMany 内联排序
我正在使用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 个回答
0
我觉得你可以重写一下
ModelAdmin.formfield_for_foreignkey(self, db_field, request, **kwargs)
你可以在这个文档里找到详细信息:ModelAdmin.formfield_for_foreignkey。
3
模型中的 ordering元选项 用来指定内联元素的排列顺序。
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。