【问题标题】:Intermediate model formset validation中间模型表单集验证
【发布时间】:2011-06-26 09:46:09
【问题描述】:

我想知道如何在中间模型表单集上指定一些约束。 我在模型中有 3 个类: Attribute、Product 和 AttributeValuation,是 Attribute 和 Product 的中间:

class Attribute(models.Model):
    type = models.CharField(max_length = 200)
    pass

class Product(models.Model):
    attribute_values = models.ManyToManyField(Attribute, through='AttributeValuation')

class AttributeValuation(models.Model):
    attribute = models.ForeignKey(Attribute)
    product = models.ForeignKey(Product)

最重要的是,我用 AttributeFormset 构建了 AttributeValuationInline,并将其注册到 ProductAdmin:

class AttributeValuationInline(admin.TabularInline):
    model = AttributeValuation
    extra = 0
    formset = AttributeFormset

class ProductAdmin(admin.ModelAdmin):
    inlines = (AttributeValuationInline,)

class AttributeFormset(BaseInlineFormSet):
    def clean(self):
        pass

我的问题是:如何在 clean 方法中检查每个内联行(表单)的内容?我已经尝试过 Formset 中 self.forms 的每种形式,但我无法访问 Attribute 模型的特定字段(想象一下,我不想用不相关的数据混淆我的问题)?

在我的示例中,我希望每个产品的每种类型最多有一个属性(这样就没有人将两个或多个具有相同类型的属性与一个产品关联)。

【问题讨论】:

    标签: django django-models django-forms


    【解决方案1】:

    我经历过

       for form in self.forms:
           form.instance
    

    没关系。为什么cleaned_data应该更好?

    【讨论】:

      【解决方案2】:
      self.forms[0].cleaned_data
      

      不行吗?

      【讨论】:

        猜你喜欢
        • 2012-08-13
        • 2012-12-22
        • 1970-01-01
        • 2016-07-13
        • 2019-05-02
        • 2016-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多