gpt4 book ai didi

django - 多对多选择多个对象

转载 作者:行者123 更新时间:2023-12-04 06:09:21 24 4
gpt4 key购买 nike

有以下型号:

class Schema(models.Model):
keys = models.ManyToManyField(Key, through='SchemaHasKey')
# ...

class Key(models.Model):
name = models.CharField(max_length=50)
# ...

我需要使用键选择 10 个第一个模式,但我的方式很糟糕:
schemas = []

for schema in Schema.objects.all().order_by('pk')[:10]:
schema.key = schema.keys.all()
schemas.append(schema)

.select_related() 效果不佳:
schemas = Schema.objects.select_related().order_by('pk')[:10]

这可以在一定数量的sql查询中完成吗?

最佳答案

这是我在 prefetch_related 之前可能会做的事情功能正式上线。

2 查询。

from collections import defaultdict

schemas = Schema.objects.order_by('pk')[:10]
key_map = defaultdict(lambda:[]) # always return a list

# use m2m through table to get all schema-key relationships related to the 10
# create a list of each `Key` with the Schema ID as the dict key.
[key_map[through.schema.id].append(through.key) for
through in Schema.keys.through.objects.filter(schema__in=schemas)]

for schema in schemas:
schema.keys = key_map[schema.id]

关于django - 多对多选择多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7947418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com