Files
RasadDam_Backend/apps/product/models.py

110 lines
3.1 KiB
Python

from django.db import models
from apps.core.models import BaseModel
# Create your models here.
class ReferenceProduct(BaseModel):
""" Reference product - like: rice """
name = models.CharField(max_length=250, default='empty') # noqa
type_choices = (
('F', 'Free'), # free product
('G', 'Governmental') # government product
)
type = models.CharField(max_length=3, choices=type_choices)
img = models.CharField(max_length=100, default='empty')
def __str__(self):
return f'name: {self.name} - type: {self.type}'
def save(self, *args, **kwargs):
super(ReferenceProduct, self).save(*args, **kwargs)
class Product(BaseModel):
""" Child of reference product - like: brown rice """
name = models.CharField(max_length=250, default='empty') # noqa
type_choices = (
('F', 'Free'), # free product
('G', 'Governmental') #
)
type = models.CharField(max_length=3, choices=type_choices)
img = models.CharField(max_length=100, default='empty')
reference = models.ForeignKey(
ReferenceProduct,
on_delete=models.CASCADE,
related_name='reference_product',
null=True
)
def __str__(self):
return f'name: {self.name} - type: {self.type}'
def save(self, *args, **kwargs):
super(Product, self).save(*args, **kwargs)
class Attribute(BaseModel):
"""
every reference product have multiple attributes
"""
reference_product = models.ForeignKey(
ReferenceProduct,
on_delete=models.CASCADE,
related_name='reference_attribute',
null=True
)
name = models.CharField(max_length=100, default='empty')
type = models.CharField(
max_length=255,
default='empty',
help_text='type of attribute like: calculate product by kilogram'
)
def __str__(self):
return f'{self.reference_product.name} - {self.name}'
def save(self, *args, **kwargs):
return super(Attribute, self).save(*args, **kwargs)
class AttributeValue(BaseModel):
"""
every child product should have attribute value for
reference product attribute
"""
product = models.ForeignKey(
Product,
on_delete=models.CASCADE,
related_name='product_attribute_value',
null=True
)
attribute = models.ForeignKey(
Attribute,
on_delete=models.CASCADE,
related_name='attribute_value'
)
value = models.IntegerField(default=0)
def __str__(self):
return f'{self.product.name} - {self.attribute.name} - {self.value}'
def save(self, *args, **kwargs):
return super(AttributeValue, self).save(*args, **kwargs)
class SaleUnit(BaseModel):
product = models.ForeignKey(
ReferenceProduct,
on_delete=models.CASCADE,
related_name='sale_unit',
null=True
)
unit = models.CharField(max_length=255, null=True)
variation_coefficient = models.CharField(max_length=255, null=True)
required = models.BooleanField(default=False)
def __str__(self):
return f'{self.product} - {self.unit} - {self.variation_coefficient}'