在django发布后的视图上保存自定义ManyToMany表单

时间:2018-06-22 00:44:24

标签: django

我正在使用ManyToMany字段自定义表单

MODELS.PY

class Module(models.Model):
    class Meta():
        db_table = "module"
        verbose_name = "Module"
        verbose_name_plural = "Modules"

    module_title = models.CharField(
        verbose_name="Module title",
        max_length=200,
        blank=False,
        null=False,
    )
    module_menu_item = models.ManyToManyField(
        'mega_admin.MenuItem',
        blank=True,
        null=True,
    )

VIEWS.PY

module_menu_item = request.POST.getlist('menu_item_menu', '')
save_module_form = ModuleForm(request.POST)

if save_module_form.is_valid():
    module = save_module_form.save(commit=False)
    module.module_title = module_title
    module.module_menu_item = module_menu_item
    save_module_form.save()

这样,我可以成功添加新模块,但是没有创建 module_menu_item

POST 上的值是:

module_menu_item_id {…}
0   28
1   22
2   27
3   25

因此,在一篇文章中,需要为模块和菜单项创建多个关系

注意:我不在模板中使用基于默认模型的表单

1 个答案:

答案 0 :(得分:0)

您还需要调用save_m2m方法来保存相关项目:

if save_module_form.is_valid():
    module = save_module_form.save(commit=False)
    module.module_title = module_title
    module.module_menu_item = module_menu_item
    module.save()
    save_module_form.save_m2m()

docs中查看详细信息。

相关问题