class PropertyCategory(models.Model):
name = models.CharField(max_length=75)
def __unicode__(self):
return self.name
class Meta:
verbose_name = _('Property Category')
verbose_name_plural = _('Property Categories')
class Property(models.Model):
category = models.ForeignKey(PropertyCategory)
name = models.CharField(max_length=75)
def __unicode__(self):
return self.name
class Meta:
verbose_name_plural = 'Properties'
class Variant(models.Model):
properties = models.ManyToManyField(Property)
code = models.CharField(max_length=255)
def __unicode__(self):
product = Product.objects.get(variants__id=self.id)
return '%s (%s)' % (product.name, ', '.join([c.name for c in self.properties.all()]))
作成/更新時にバリアントを検証するにはどうすればよいですか ?Property
PropertyCategory
私がこの製品を持っているとしましょう。Lace-trim Cheeky Panty (Pink, XS)
ここで、括弧内のプロパティはProperties
fromPropertyCategory
Color
とSize
です。Variant
をそれぞれ 1 つしか持てないように制限したいPropertyCategory
ので、このようなことは起こりません。
Lace-trim Cheeky Panty (Pink, XS, Blue, M)
それに加えて、複数持つことが許可されているPropertyCategory
場合、に特別な値を設定することを考えています。洗濯指示が複数回発生する可能性があるとしましょう。その違いをどのように捉えますか?
class PropertyCategory(models.Model):
name = models.CharField(max_length=75)
multi_instance = models.BooleanField() # This determines if the Category's Properties can be applied more than once on a Variant
...
multi_instance
..しかし、この機能は、ユーザーが後でfrom True
toFalse
などを設定することを決定した場合に関係を壊す可能性があるため、おそらくより多くの問題を引き起こします.
たぶん、法線PropertyCategory
を拡張できMultiPropertyCategory
ますか?