from django.db import models from haoke.utils.models import BaseModel
class GoodsCategory(BaseModel): """ 商品类别 """
name = models.CharField(max_length=10, verbose_name="名称") parent = models.ForeignKey('self', null=True, blank=True, on_delete=models.CASCADE, verbose_name="父类别")
class Meta: db_table = "tb_goods_category" verbose_name = "商品类别" verbose_name_plural = verbose_name
def __str__(self): return self.name
class GoodsChannel(BaseModel): """商品频道""" group_id = models.IntegerField(verbose_name="组号") category = models.ForeignKey(GoodsCategory, on_delete=models.CASCADE, verbose_name="顶级商品类别") url = models.CharField(max_length=50, verbose_name='频道页面链接') sequence = models.IntegerField(verbose_name="组内顺序")
class Meta: db_table = "tb_goods_channel" verbose_name = "商品频道" verbose_name_plural = verbose_name
class Brand(BaseModel): """品牌""" name = models.CharField(max_length=20, verbose_name="名称") logo = models.ImageField(verbose_name="Logo图片") first_letter = models.CharField(max_length=1, verbose_name="品牌首字母")
class Meta: db_table = 'tb_brand' verbose_name = "品牌" verbose_name_plural = verbose_name
def __str__(self): return self.name
class Goods(BaseModel): """商品SPU""" name = models.CharField(max_length=50, verbose_name="名称") brand = models.ForeignKey(Brand, on_delete=models.PROTECT, verbose_name="品牌") category1 = models.ForeignKey(GoodsCategory, on_delete=models.PROTECT, related_name='cat1_goods', verbose_name="一级类别") category2 = models.ForeignKey(GoodsCategory, on_delete=models.PROTECT,related_name='cat2_goods', verbose_name="二级类别") category3 = models.ForeignKey(GoodsCategory, on_delete=models.PROTECT, related_name='cat3_goods', verbose_name="三级类别") sales = models.IntegerField(default=0, verbose_name="销量") comments = models.IntegerField(default=0, verbose_name='评价数')
class Meta: db_table = 'tb_goods' verbose_name = "商品" verbose_name_plural = verbose_name
def __str__(self): return self.name
class GoodsSpecification(BaseModel): """商品规格""" goods = models.ForeignKey(Goods, on_delete=models.CASCADE, verbose_name="商品") name = models.CharField(max_length=20, verbose_name="规格名称")
class Meta: db_table = "tb_goods_specification" verbose_name ="商品规格" verbose_name_plural = verbose_name
def __str__(self): return self.name
class SpecificationOption(BaseModel): """规格选择""" spec = models.ForeignKey(GoodsSpecification, on_delete=models.CASCADE, verbose_name="规格") value = models.CharField(max_length=20, verbose_name="选项值")
class Meta: db_table = "tb_specification_option" verbose_name = "规格选项" verbose_name_plural = verbose_name
def __str__(self): return '%s - %s' %(self.spec, self.value)
class SKU(BaseModel): """商品SKU""" name = models.CharField(max_length=50, verbose_name="名称") caption = models.CharField(max_length=100, verbose_name="副标题") goods = models.ForeignKey(Goods, on_delete=models.CASCADE, verbose_name="商品") category = models.ForeignKey(GoodsCategory, on_delete=models.PROTECT, verbose_name="从属类别") price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="单价") cost_price = models.DecimalField(max_digits=10,decimal_places=2, verbose_name="进价") market_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="市场价") stock = models.IntegerField(default=0, verbose_name="库存") sales = models.IntegerField(default=0, verbose_name="销量") comments = models.IntegerField(default=0, verbose_name="评价数") is_launched= models.BooleanField(default=False, verbose_name="是否上架销售") default_image_url = models.CharField(max_length=200, default='', null=True, blank=True, verbose_name="默认图片")
class Meta: db_table = "tb_sku" verbose_name = "商品SKU" verbose_name_plural = verbose_name
def __str__(self): return '%s:%s' % (self.id, self.name)
class SKUImage(BaseModel): """SKU图片""" sku = models.ForeignKey(SKU, on_delete=models.CASCADE, verbose_name="sku") image = models.ImageField(verbose_name="图片")
class Meta: db_table = "tb_sku_image" verbose_name = "SKU图片" verbose_name_plural = verbose_name
def __str__(self): return '%s %s' % (self.sku.name, self.id)
class SKUSpecification(BaseModel): sku = models.ForeignKey(SKU, on_delete=models.CASCADE, verbose_name='sku') spec = models.ForeignKey(GoodsSpecification, on_delete=models.PROTECT, verbose_name='规格名称') option = models.ForeignKey(SpecificationOption, on_delete=models.PROTECT, verbose_name="规格值")
class Meta: db_table = "tb_sku_specification" verbose_name = "SKU规格" verbose_name_plural = verbose_name
def __str__(self): return '%s: %s - %s' %(self.sku, self.spec.name, self.option.value)
|