我有两类男人和女人,我想创建子类别并将其连接到产品中 这是我的models.py
class Category(models.Model):
name = models.CharField(max_length=200,
db_index=True)
slug = models.SlugField(max_length=200,
db_index=True,
unique=True)
class Meta:
ordering = ('name',)
verbose_name = 'category'
verbose_name_plural = 'categories'
def __str__(self):
return self.name
class Product(models.Model):
category = models.ForeignKey(Category,
related_name='products')
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True)
image = models.ImageField(upload_to='products/%Y/%m/%d',
blank=True)
description = models.TextField(blank=True)
price = models.DecimalField(max_digits=10, decimal_places=2)
stock = models.PositiveIntegerField()
available = models.BooleanField(default=True)
created = models.DateField(auto_now_add=True)
update = models.DateField(auto_now=True)
class Meta:
ordering = ('name',)
index_together = (('id', 'slug'),)
def __str__(self):
return self.name
我想我可以创建这个类
class Subcategory
name = models.CharField(max_length=200,
db_index=True)
slug = models.SlugField(max_length=200,
db_index=True,
unique=True)
category = models.ForeignKey(Category)
并将其添加到Product class
subcategory = models.ForeignKey(Subcategory)
但我不认为这是一个好方法
答案 0 :(得分:1)
您可以将parent_category字段添加到Category模型中,该模型是自身的外键:
parent_category=models.ForeignKey('self', on_delete=models.CASCADE, null=True)
然后,您可以将任何具有parent_category的类别视为子类别。
如果您希望产品位于多个(子)类别中,则必须在Product Model上将类别字段设为ManyToMany字段而不是外键。如果产品最多只能包含一个类别且最多只有一个子类别,那么您可以在产品型号上保留一个类别和子类别字段,但必须为每个类别设置related_name
。
答案 1 :(得分:0)
您可以使用此字段(如voodoo-burger所述)从Category对象创建邻接树,我还添加了blank = True,以便能够在Django admin中创建根类别。
parent=models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True)
接下来,如果您有许多类别并希望对树结构进行查询,则需要查看MPTT(https://github.com/django-mptt/django-mptt)。