我有以下型号:
class Category(models.Model):
name = models.CharField(max_length=255)
parent = models.ForeignKey("self", blank=True, null=True)
class Meta:
verbose_name = _("category")
verbose_name_plural = _("categories")
def __unicode__(self):
return self.name
class Item(models.Model):
name = models.CharField(max_length=100, verbose_name=_("name"))
keywords = models.CharField(max_length=255, verbose_name=_("keywords"))
category = models.ForeignKey(Category)
class Meta:
abstract = True
verbose_name = _('item')
verbose_name_plural = _('items')
class Product(Item):
price = models.DecimalField(decimal_places=2, max_digits=8, verbose_name=_("price"))
brand = models.ForeignKey(Brand, verbose_name=_("brand"))
article_number = models.CharField(max_length=255, verbose_name=_("article_number"))
def __unicode__(self):
return self.name
class Meta:
verbose_name = _('product')
verbose_name_plural = _('products')
假设我在数据库中有以下类别:
ID NAME PARENT_ID
1 Products null
2 Phones 1
3 iPhones 2
我可以通过以下方式获得最高类别:
#This is a product with the category "iPhones"
product.category.parent.parent
但这并不好,因为一个产品可以是x个很深的类别。
如何获取数组中的所有相关类别?
Wanted output = [iPhones, Phones, Products]
答案 0 :(得分:2)
为项目类编写模型属性方法:
class Item(models.Model):
@property
def all_categories(self):
categories = []
current_category = self.category
while current_category is not None:
categories.append(current_category)
current_category = current_category.parent
return categories
#optional return reversed list:
#return list(reversed(categories))
现在,您可以使用
获取所需的列表product.all_categories