考虑我已经定义了以下模型:
class Tag(models.Model):
name = models.CharField(max_length=20)
class Entry(models.Model):
title = models.CharField(max_length=100)
date = models.DateField()
tags = models.ManyToManyField(Tag)
以及以下模型形式:
class EntryForm(forms.ModelForm):
tags = CharField(max_length=100, label='Tags', required=False)
class Meta:
model = Entry
基本上我有一个带有标签的条目。标签不一定已经创建。我需要收到填写完毕的报名表并用标签保存。
如果条目中没有 ManyToMany 关系,我可以轻松做到这一点。但有了它,我首先需要保存标签,然后将保存的标签添加到条目中,然后保存条目。这意味着我必须重写 EntryForm 的 save() 方法。
我看到了this已经有问题了,但看起来有所不同。就我而言,我只需要保存标签,其余的应该能够使用 ModelForm 的默认 save()。
我提出了一个简化的例子。在真实的情况下,我的条目中有更多字段。 对于以 django 方式编写 EntryForm 的 save() 方法,您有何建议?
最佳答案
我认为你可以在保存标签后调用 super 。也许您需要在创建条目后追加到该条目。
def save(self, commit=True):
# do custom stuff
tags =[]
for t in self.cleaned_data['tags'].split(','):
tags.append(Tag.objects.get_or_create(name=t))
# save entry
e = super(EntryForm, self).save(commit=commit)
for t in tags:
e.tags.add(t)
关于django - 如何正确地使用 ManyToManyField 覆盖模型的 ModelForm 的 save() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3971964/