假设有两种模式:作者和预订。 果然 Book 有作者的外键。 有一个创建视图,用户在其中提供作者的姓名,并上传包含其书籍列表的文件。
所以我试图找出创建表单的最佳方法。 现在我有:
class AddForm(ModelForm):
books = FileField()
class Meta:
model = Author
def clean_books(self):
return [book.strip() for book in self.cleaned_data['books'].file]
问题是我应该在哪里实际创建图书模型对象?看起来应该采用save
方法,例如:
def save(self, commit=True):
author = super().save(commit=True)
Book.objects.bulk_create([Book(author=author, title=book.title, ...) for book in self.cleaned_data['books']])
return author
但是可以吗?真正让我烦恼的是commit
论点。它完全被忽略了,如果它们提供commit=False
,它可能会混淆其他人。我如何考虑提交参数而不破坏逻辑?
答案 0 :(得分:1)
看看inline formsets。使用它们,您可以在主窗体中添加一堆内联表单。该formset将为您处理所有数据处理并将Book
实例保存到数据库中。它就像django admin中的内联。