嘿伙计们我有这些模型
class Theme(models.Model):
name = models.charfield()
class Category(models.Model):
name = models.charfield()
class Product(models.Model):
category = models.ForeginKey(Category)
theme = models.ForeignKet(Theme)
......
class Order(models.Model):
product = models.ForeigKey(Product)
字符串
我想在一个查询中从订单示例中获取产品和产品的类别,我知道对于forward foreignkey,你应该使用select related,但我不认为有一种方法来获取产品类别,当你使用这个:
Order.objects.all().select_related('product')
型
那么用这一个对吗?
Order.objects.all().prefetch_related('product__category')
型
我最后一个问题,假设我有这些模型:
class Category(models.Model):
name = models.charfield()
class Product(models.Model):
category = models.ForeginKey(Category)
theme = models.ForeignKet(Theme)
class Course(models.Model):
category = models.ForeginKey(Category)
......
class Order(models.Model):
product = models.ForeigKey(Product)
型
如果我有产品,我想获取也类别和课程相关的这个类别太
product = LvaProducts.objects.all().select_related('category')[0]
courses = product.category.course_set
型
这是最有效的方法吗
2条答案
按热度按时间sigwle7e1#
因为
Order
到Product
是 * 多对一 * 关系,Product
到Category
是 * 多对一 * 关系,所以你可以通过**.select_related(…)
**[Django-doc]获取这两个关系:字符串
o2g1uqev2#
您可以在
select_related
调用中使用双下划线链接关系字符串
编辑:您可以使用相同的技术在相关模型上运行预取
型