中间模型formset验证

时间:2011-02-13 11:04:30

标签: django django-models django-forms

我想知道如何在中间模型formset上指定一些约束。 我在模型中有3个类: 属性,产品和属性值,属于属性和产品的中间:

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模型的特定字段(想象有一些,我不想用无关数据混淆我的问题)?

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

2 个答案:

答案 0 :(得分:0)

self.forms[0].cleaned_data

不会工作?

答案 1 :(得分:0)

我经历了

   for form in self.forms:
       form.instance

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

相关问题