主要问题是如何通过带有自动名称的管理面板组织商品的创建?我认为代码会很清楚。
在 models.py 文件中,由于特定的特性,我为每个类别定义了一个单独的类:
class BaseProductInfo(models.Model):
title = models.CharField(max_length=24, verbose_name='Название')
manufacturer = models.CharField(max_length=24, verbose_name='Производитель')
photo = models.ImageField(upload_to="photos/", verbose_name='Фото')
description = models.TextField(blank=True, verbose_name='Описание')
included = models.CharField(max_length=24, verbose_name='Комплектация')
created = models.DateTimeField(auto_now_add=True, verbose_name='Создано')
updated = models.DateTimeField(auto_now=True, verbose_name='Обновлено')
is_published = models.BooleanField(default=True, verbose_name='Опубликовано')
category = models.ForeignKey('ProductCategory', on_delete=models.PROTECT)
price = models.CharField(max_length=24, verbose_name='Цена')
def __str__(self):
return self.title
class Motherboard(BaseProductInfo, models.Model):
form_factor = models.CharField(max_length=24)
chipset = models.CharField(max_length=24)
ddr_version = models.CharField(max_length=24)
m2_slots = models.CharField(max_length=24)
class Videocard(BaseProductInfo, models.Model):
memory = models.CharField(max_length=24, verbose_name='Объём памяти')
ddr_version = models.CharField(max_length=24, verbose_name='Тип памяти')
bitness = models.CharField(max_length=24, verbose_name='Битность шины')
frequency = models.CharField(max_length=24, verbose_name='Частота GPU')
class ProductCategory(models.Model):
name = models.CharField(max_length=100, db_index=True)
def __str__(self):
return self.name
我希望管理员在注册产品时不要选择类别。例如,在管理面板中输入产品“Videocard”,从数据库中选择了指定的类别。
第二个问题 - 我是否正确地接近实施?
我没有完全理解这个问题,但是如果你想根据产品名称自动放下一个类别,那么你可以这样做:
另外,如果我没记错的话,你不需要把它
models.Model放在子模型上,因为这个类BaseProductInfo已经继承了它。PS 有趣的问题,原来我不太清楚模型是如何在 django 中继承的。 阅读链接
PPS 也许我在语法/调用方法的某个地方犯了错误,但我想你会弄清楚的,这里是一个如何实现的想法,而不是最终的实现。
更新
或许用这样的架构来存储特征会更正确: