编程语言
首页 > 编程语言> > python-使用自定义的多对多模型保存ModelForm

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