如何在Django Admin站点中编辑中间ManyToMany表中的值?

时间:2018-04-21 20:43:24

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

我希望能够通过Django Admin网站在我的数据库中创建鸡尾酒。为此,我有一个鸡尾酒'模型和成分'模型。他们需要一个ManyToMany关系,允许额外的字段' amount_in_oz',所以我使用了一个' IngredientAmount'带有'到'的中间模型。在管理网站中,当我点击“添加鸡尾酒”时,我希望能够为鸡尾酒命名,然后添加来自“成分”的几个项目。同时还指定了' amount_in_oz'为每个人。

SELECT b.`date`,max(a.`num`*b.`val`) AS `total`
FROM test a 
LEFT JOIN `test2` b
    ON b.`date` >= a.`date`
WHERE b.date is not null
GROUP BY b.`dates`;

似乎因为中间表需要额外的输入,所以filter_horizo​​ntal小部件无法处理它。

我想知道实现这一目标的最佳方法是创建自定义表单还是自定义验证? https://docs.djangoproject.com/en/2.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin.form

或者使用formfield_overides? https://docs.djangoproject.com/en/2.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_overrides

或者为ModelAdmin创建一个新的小部件,例如' filter_horizo​​ntal',但是在中间有一个文本框来输入值?

1 个答案:

答案 0 :(得分:0)

您可以使用联接表并进行内联:

https://docs.djangoproject.com/en/2.0/ref/contrib/admin/#inlinemodeladmin-objects

from django.contrib import admin

class IngredientAmountInline(admin.StackedInline):
    model = IngredientAmount

class CocktailAdmin(admin.ModelAdmin):
    inlines = [
        IngredientAmountInline,
    ]