class AppUser(models.Model):
user = models.ForeignKey(User, unique=True)
slug = models.SlugField(editable=False, blank=True)
对于上面的模型,假设我们在模板
中有一个对象“appuser”每次我们使用它时,django是否会像我们的代码中的appuser.user.username一样点击用户数据库?
在访问外键和多对多变量时如何完成django / python db查找?
答案 0 :(得分:2)
您应仔细阅读本文,了解数据库访问优化的所有详细信息:https://docs.djangoproject.com/en/1.3/topics/db/optimization/
select_related()
:
https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related
至于你的问题的快速回答:这取决于你如何检索对象
用
appuser = AppUser.objects.get(pk=id)
它将分别为appuser.user点击数据库。
但是
appuser = AppUser.objects.select_related().get(pk=id)
它将执行联接查询,因此访问appuser.user不会触发SQL查询。
答案 1 :(得分:0)
如果settings.DEBUG设置为True,则应启用SQL日志记录。至于你的问题,是的,当你执行appuser.user.username时,AppUser会加入User表(使用主键)。
如果您正在运行开发网络服务器,您应该能够在控制台上看到日志。
答案 2 :(得分:0)