2

我正在使用 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 中的所有内容并将其与 tank 对象匹配

4

2 回答 2

6

如果你已经有了你的坦克对象,你应该能够做到:

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
于 2009-03-04T14:59:53.617 回答
1

我可能误解了您的问题,但请求User.objects.filter()将返回用户对象列表,而不是用户 ID。你写的在技术上看起来是正确的。

但请记住,您拥有的模型在 TankProfile 对象和 TankJournal 之间建立了一对多的关系。换句话说,一个 TankProfile 可以与多个 TankJournal 相关联,因此可以与多个用户相关联。鉴于此,您的查询正在做正确的事情,返回多个用户。

于 2009-03-04T15:01:10.290 回答