我想在管理变更表单中强制设置一个完整的内联表单集.因此,在我当前的场景中,当我在发票表单上点击save(在Admin中)时,内联订单表单为空.我想阻止人们创建没有关联订单的发票.

有人知道一个简单的方法吗?

在这种情况下,像MODEL字段上的(required=True)这样的正常验证似乎不起作用.

推荐答案

要做到这一点,最好的方法是定义一个自定义表单集,使用一个干净的方法来验证至少存在一个发票订单.

class InvoiceOrderInlineFormset(forms.models.BaseInlineFormSet):
    def clean(self):
        # get forms that actually have valid data
        count = 0
        for form in self.forms:
            try:
                if form.cleaned_data:
                    count += 1
            except AttributeError:
                # annoyingly, if a subform is invalid Django explicity raises
                # an AttributeError for cleaned_data
                pass
        if count < 1:
            raise forms.ValidationError('You must have at least one order')

class InvoiceOrderInline(admin.StackedInline):
    formset = InvoiceOrderInlineFormset


class InvoiceAdmin(admin.ModelAdmin):
    inlines = [InvoiceOrderInline]

Django相关问答推荐

在Django的反向函数中添加动态URL

Django ORM多表一对多关系问题

如何在创建对象后立即运行一次代码?

带有变量键的 Django 模板括号表示法不起作用

如何访问 django 模板中的字典值?

使用自定义的AuthBackend时,无法使用request.user.is_authenticated或@login_required修饰符

如何将数据库中的 None 序列化为空对象?

Django 和 HTML 无法从指定时间开始视频

Django 模型 Select - 只允许管理界面上的特定转换

Django ORM:获取每个类别的月平均价格

未为部署的 django rest 框架加载静态文件

Django Rest Framework 中的 to_representation() 可以访问普通字段吗

使用基于类的 UpdateView 在 Django 中更新用户模型

Django JSONField 过滤

如何从不是 django 元素文件夹的文件夹中运行 gunicorn

Django 模型将外键设置为另一个模型的字段

使用移动应用程序保护通信 [真实性、隐私和完整性]?

使用 XMLHttpRequest 提示下载文件

如何从 Django 的 TabularInline 管理视图中省略对象名称?

Django中的自定义排序