如何在Django管理区域中显示多对多关系字段(如果多对多关系正在使用'到')?

时间:2016-11-16 14:49:02

标签: django django-models django-forms django-admin

我知道在管理区域中显示外键的字段很容易,但如果使用了通过,如何显示多对多关系的字段?

Models.py:

class Pizza(models.Model):
    toppings = models.ManyToManyField(Topping, through='PizzaTopping')

class Topping(models.Model):
    topping = models.CharField(max_length=255)

class PizzaTopping(models.Model):
    pizza = models.ForeignKey(Pizza)
    topping = models.ForeignKey(Topping)

Admin.py:

class PizzaAdmin(admin.ModelAdmin):
    fieldsets = (
        (None, {
            'fields': ('toppings')
        }),
    })
)

这会产生以下错误:

<class 'pizzas.admin.PizzaAdmin'>: (admin.E013) The value of 'fieldsets[0][1]["fields"]' cannot include the many-to-many field 'toppings' because that field manually specifies a relationship model.

我想显示一个允许我选择顶部的方框或列表框。

这可能吗?

由于

1 个答案:

答案 0 :(得分:2)

您可以将浇头显示为内联。

from django.contrib import admin

class ToppingInline(admin.TabularInline):
    model = PizzaTopping

class Pizza(admin.ModelAdmin):
    inlines = [
        ToppingInline,
    ]
    exclude = ('toppings',)

有关详细信息,请参阅working with many-to-many models上的管理员文档。