python-使用自定义的多对多模型保存ModelForm
作者:互联网
我有出版物和作者.由于作者的顺序很重要(不想在提供一些琐碎数据的实习生之后列出这位教授),所以我定义了一个定制的多对多模型:
class Authorship(models.Model):
author = models.ForeignKey("Author")
publication = models.ForeignKey("Publication")
ordering = models.IntegerField(default=0)
class Author(models.Model):
name = models.CharField(max_length=100)
class Publication(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author, through=Authorship)
我有一个用于出版物的ModelForm,并在视图中使用它.问题是,当我调用form.save()时,显然添加了默认顺序为0的作者.我编写了一个OrderedModelMultipleChoiceField,其带有一个干净的方法,该方法以正确的顺序返回要保存的对象,但是我没有这样做.找不到实际保存m2m数据的位置,以便我自己添加/编辑/删除Authorship实例.
有任何想法吗?
解决方法:
如果您正在使用通过参数的自定义M2M表,我相信您必须手动执行保存操作才能保存其他字段.因此,在您看来,您将添加:
...
publication = form.save()
#assuming that these records are in order! They may not be
order_idx = 0
for author in request.POST.getlist('authors'):
authorship = Authorship(author=author, publication=publication, ordering=order_idx)
authorship.save()
order_idx += 1
您也可以将其放置在ModelForm的保存功能中.
标签:django-forms,python,django 来源: https://codeday.me/bug/20191209/2095896.html