限制 Django 的 inlineformset_factory 只创建新对象

2024-04-08

我正在使用 django 的内联表单集工厂。要使用文档中的示例,

author = Author.objects.get(pk=1)
BookFormSet = inlineformset_factory(Author, Book)
formset = BookFormSet(request.POST, instance=author)

将创建一个内联表单集来编辑特定作者的书籍。

我想创建一个表单集,只允许用户add该作者的新书,而不是编辑现有的书。有没有一种简单的方法可以使用 inlineformset_factory 来做到这一点?


inlineformset_factory 采用表单集 kwarg,默认为 BaseInlineFormSet。 BaseInlineFormSet 是 BaseModelFormSet 的子类,它定义了 get_queryset 方法。如果您创建 BaseInlineFormSet 子类并重写 get_queryset 以返回 EmptyQuerySet(),您应该得到您想要的结果。在上面的例子中,它看起来像这样:

from django.db.models.query import EmptyQuerySet
from django.forms.models import BaseInlineFormSet

class BaseInlineAddOnlyFormSet(BaseInlineFormSet):
    def get_queryset(self):
        return EmptyQuerySet()

author = Author.objects.get(pk=1)
BookFormSet = inlineformset_factory(Author, Book, formset=BaseInlineAddOnlyFormSet)
formset = BookFormSet(request.POST, instance=author)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

限制 Django 的 inlineformset_factory 只创建新对象 的相关文章

随机推荐