Django ManyToMany在1.2.x中内联订购

时间:2010-11-12 17:08:08

标签: python django inlines modeladmin

我正在使用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字段以按内联订购?

2 个答案:

答案 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的文档中找到详细信息。