【问题标题】:Propper related objects creation within Django modelform在 Django 模型中创建适当的相关对象
【发布时间】:2015-08-25 12:22:57
【问题描述】:

假设有两个模型:AuthorBook。 果然Book有一个Author的外键。 有一个创建视图,用户在该视图中给出作者的姓名并上传包含其拥有的书籍列表的文件。

所以我试图找出创建表单的最佳方法。 现在我有:

class AddForm(ModelForm):
     books = FileField()
     class Meta:
          model = Author

     def clean_books(self):
          return [book.strip() for book in self.cleaned_data['books'].file]

问题是我应该把 Books 模型对象的实际创建放在哪里?看起来它应该在 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,它可能会混淆其他人。如何考虑提交参数而不破坏逻辑?

【问题讨论】:

    标签: python django django-forms


    【解决方案1】:

    看看inline formsets。使用它们,您可以在主表单中添加一堆内联表单。该表单集将为您处理所有数据处理并将Book 实例保存到数据库中。这就像 django admin 中的内联。

    【讨论】:

    • 不幸的是,我不明白如何在我的具体示例中使用它。如果我使用 CreateView CBV,你能提供一个例子吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 2016-08-15
    • 1970-01-01
    • 2012-03-30
    • 2011-04-06
    • 1970-01-01
    相关资源
    最近更新 更多