class Item(models.Model):
title = models.CharField(max_length=100)
price = models.DecimalField(decimal_places=2, max_digits=100)
category = models.CharField(choices=CATEGORY_CHOICES, max_length=2)
label = models.CharField(choices=LABEL_CHOICES, max_length=1)
slug = models.SlugField(unique=True)
timestamp = models.DateTimeField(default=timezone.now)
active = models.BooleanField(default=True)
def __str__(self):
return self.title
class VariationManager(models.Manager):
def all(self):
return super(VariationManager, self).filter(active=True)
def sizes(self):
return self.all().filter(category='size')
def colors(self):
return self.all().filter(category='color')
VAR_CATEGORIES = (
('size', 'size',),
('color', 'color',),
('package', 'package'),
)
class Variation(models.Model):
item = models.ForeignKey(Item, on_delete=models.CASCADE)
category = models.CharField(
max_length=120, choices=VAR_CATEGORIES, default='size')
title = models.CharField(max_length=120)
objects = VariationManager()
updated = models.DateTimeField(auto_now_add=False, auto_now=True)
active = models.BooleanField(default=True)
def __str__(self):
return self.title
@receiver(post_save, sender=Item)
def add_default_Variant(sender, instance, **kwargs):
small_size = Variation.objects.create(
item=instance, category='size', title='Small')
medium_size = Variation.objects.create(
item=instance, category='size', title='Medium')
large_size = Variation.objects.create(
item=instance, category='size', title='Large')
@receiver(post_save, sender=Item)
def add_default_Variant(sender, instance, **kwargs):
variant, created = Variation.objects.get_or_create(
title="Small", item=instance)
variant, created = Variation.objects.get_or_create(
title="Medium", item=instance)
variant, created = Variation.objects.get_or_create(
title="Large", item=instance)
print(f"default variant created : {variant}")