Adding a default Variation when creating a new Item

16 views
Skip to first unread message

Ahmed Khairy

unread,
May 12, 2020, 9:52:38 PM5/12/20
to Django users
I have created this code for defining a default everytime I create a new product, 

It is working fine and whenever I create a new Item a new variable (size) is create 

I want to check whether this code is correct or not as I have had help from someone and I think we could have created an easier way for it 


class Item(models.Model):
    title = models.CharField(max_length=100)
    price = models.DecimalField(decimal_places=2max_digits=100)
    category = models.CharField(choices=CATEGORY_CHOICESmax_length=2)
    label = models.CharField(choices=LABEL_CHOICESmax_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=120choices=VAR_CATEGORIESdefault='size')
    title = models.CharField(max_length=120)
    objects = VariationManager()
    updated = models.DateTimeField(auto_now_add=Falseauto_now=True)
    active = models.BooleanField(default=True)

    def __str__(self):
        return self.title

@receiver(post_save, sender=Item)
def add_default_Variant(senderinstance**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(senderinstance**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}")

Reply all
Reply to author
Forward
0 new messages