Мне интересно, как указать некоторые ограничения для промежуточной модели formset.
У меня есть 3 класса в модели:
Атрибут, 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)
Кроме того, я построил AttributeValuationInline с AttributeFormset и зарегистрировал его в 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 содержимое каждой строки (формы)? Я пробовал каждую форму self.forms в Formset, но я не мог получить доступ к определенным полям модели атрибутов (представьте, что есть некоторые, я не хочу, чтобы запутать мой вопрос с не относящимися к делу данными)?
В моем примере я хотел бы иметь максимум один Атрибут каждого типа для каждого Продукта (чтобы никто не помещал два или более атрибута с одним и тем же типом, связанным с одним Продуктом).