假设我有以下型号。
class Item(models.Model):
seller = models.ForeignKey('seller.Seller')
class ItemSet(models.Model):
items = models.ManyToManyField("Item", related_name="special_items")
我想做的是
对于给定的卖家,检索在ItemSet中存储为special_items的所有项目。
以下代码是我想出来的,没有尝试过,只是预感它不起作用。 :(
(我想检索item_founds和item_specials)
item_founds = Item.objects.filter(seller=seller).prefetch_related(
Prefetch(
"special_items",
queryset=Items.objects.prefetch_related("items")
)
)
item_specials = Item.objects.none()
for item_found in item_founds.all():
for special_item in item_found.special_items.all():
item_specials |= special_item.items.all()
答案 0 :(得分:0)
在Django中,您必须始终从最终所需的模型中执行查询。在你的情况下是seller.Seller
。否则你会得到糟糕的代码和冒险性能差(比如你的代码中你在循环中有两个查找...)
Seller.objects.get(pk=<seller id here>).prefetch_related(
'items',
queryset=Item.objects.exclude(
special_items=None
),
to_attr='item_specials'
)
哪个应该为您Seller
提供item_specials
属性中的一组特殊项目。