class CategoryDetailView(DetailView):
model = Category
def get_context_data(self, *args, **kwargs):
context = super(CategoryDetailView, self).get_context_data(*args, **kwargs)
obj = self.get_object()
product_set = obj.product_set.all()
default_product = obj.default_category.all()
products = (product_set | default_products).distinct()
context["products"] = products
return context
我不明白哪个物品正在归还?
从上面看,"类别"将返回模型对象,但有趣的是"类别" model未连接到"产品" model(在产品模型中没有明确的FK),在定义对象后立即引用 - 由obj.product_set.all()代码引用。
class Category(models.Model):
title = models.CharField()
slug = models.SlugField()
description = models.TextField()
active = model.BooleanField()
timestamp = models.DateTimeField()
def __unicode__(self):
return self.title
A"产品"模型也存在,定义如下 -
class Product(models.Model):
title = models.CharField()
categories = models.ManyToManyField('Category', blank=True)
似乎这个ManyToManyField参考是" product_set"但是我想绝对肯定,因为在类别模型中没有明确的参考产品时,这个代码范例似乎很难阅读。
答案 0 :(得分:0)
唯一的区别在于属性命名:定义ManyToManyField的模型使用该字段本身的属性名称,而“反向”模型使用原始模型的小写模型名称,加'_set' (就像反向的一对多关系一样)。
(强调我的)
所以是的,它是djangos很酷的小功能之一,只要有很多关系,添加_set
就会查询与来电者有“一对/多对多”关系的对象。