【问题标题】:django inner join querydjango 内连接查询
【发布时间】:2009-03-04 14:48:10
【问题描述】:

我正在使用 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'

我需要提取给定 tank 对象的用户名。

用户对象是 django 内置的。谢谢!

编辑:

我试过了

print User.objects.filter(tankjournal__tank__exact=id)

它似乎不只是拉出id..并拉出tankjournal中的所有内容并将其与tank对象匹配

【问题讨论】:

    标签: django inner-join


    【解决方案1】:

    如果你已经有了你的 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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 每个用户可以有多个坦克..每个坦克可以有多个日记帐分录..从 tankJournal 模型中删除 User 对象的正确方法还是?
      • 如果每个坦克可以有多个日记帐分录,那么每个坦克也可以有(可能)多个用户。如果您需要将其缩小到单个用户,则需要一些其他参数。您是从 TankJournal 还是从 User 开始可能取决于该参数是什么。
      猜你喜欢
      • 2013-06-26
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 2017-06-30
      • 2018-02-08
      • 1970-01-01
      • 2018-10-08
      • 1970-01-01
      相关资源
      最近更新 更多