我正在与django合作,并且很难掌握如何进行复杂的查询
这是我的模特
class TankJournal(models.Model):
user = models.ForeignKey(User)
tank = models.ForeignKey(TankProfile)
ts = models.DateTimeField(auto_now=True)
title = models.CharField(max_length=50)
body = models.TextField()
class Meta:
ordering = ('-ts',)
get_latest_by = 'ts'
我需要在坦克对象的情况下拉出用户名。
用户对象是内置于django中的用户对象..谢谢!
编辑:
我试过这个
print User.objects.filter(tankjournal__tank__exact=id)
似乎没有拉出id ...并将tankjournal中的所有内容拉出来并将其与坦克对象相匹配
答案 0 :(得分:6)
如果您已经拥有 tank 对象,那么您应该可以:
tank.user.username
要减少数据库查询,您可能需要考虑使用select_related(),例如
tanks = TankJournal.objects.all().select_related()
for tank in tanks:
username = tank.user.username
如果你有特定的坦克ID,那么:
tank = TankJournal.objects.select_related().get(id=123456)
username = tank.user.username
答案 1 :(得分:1)
我可能误解了您的问题,但User.objects.filter()
上的请求将返回用户对象列表,而不是用户ID。你所写的内容在技术上看是正确的。
但请记住,您所拥有的模型在TankProfile对象和TankJournal之间设置了一对多。换句话说,单个TankProfile可以与多个TankJournal相关联,因此可以与多个用户相关联。鉴于此,您的查询正在做正确的事情,返回多个用户。