【发布时间】:2018-01-30 20:32:20
【问题描述】:
我想弄清楚我在这段代码中做错了什么:
contacts = Contact.objects.user(request.user).prefetch_related(
Prefetch('contact_phone',
queryset = ContactPhone.objects.order_by('value')))
for contact in contacts:
for contact_phone in contact.contact_phone.all():
# do something
Django 多次访问数据库。有任何想法吗 ?难道我可以在Django模板中使用prefetch_related,并且在视图中它多次访问数据库???
对于 10 个联系人,我有 10 个数据库命中,每一个看起来像这样:
SELECT ... FROM `contact_phone` WHERE `contact_phone`.`contact_id` = ...
ORDER BY `contact_phone`.`id` ASC LIMIT 1
所以,对我来说似乎有两件不清楚的事情。首先,为什么 Django 会为每个联系人打数据库。其次,为什么将电话号码限制为 1 条记录?
相应的模型如下所示:
class ContactPhone(BaseMixin):
contact = models.ForeignKey(Contact, models.CASCADE, related_name = 'contact_phone')
【问题讨论】:
-
什么是
# do something?user(request.user)?是什么我不确定您是否显示了足够的代码来解释问题。
标签: django django-orm