如何编写一个Django ORM查询,其中select表与另一个表共享一个公共列?

2024-09-26 22:13:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是Django和python3.7。我有这两种型号。注意它们都有一个相似的字段

class Article(models.Model):
    publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE,)


class WebPageStat(models.Model):
    objects = WebPageStatManager()
    publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE, )
    score = models.BigIntegerField(default=0)

我想编写一个Django ORM查询,它选择其中一个模型,但在shared列上进行连接,以便在“score”字段上进行比较。我试过下面的方法,但遗憾的是错误

Article.objects.filter(publisher=webpagestat.publisher, webpagestat.score__gte==100)
  File "<input>", line 1
SyntaxError: positional argument follows keyword argument

如何在join中包含“webgestat”表


Tags: djangomodelobjectsonmodelsarticleargumentdelete
1条回答
网友
1楼 · 发布于 2024-09-26 22:13:01

在Django中,通过使用lookups that span relations可以轻松地完成所需的操作。在您的示例中,您需要添加一种在ORM中引用相关对象的方法。这是通过设置ForeignKey字段的related_name属性来实现的。虽然这不是严格必要的,但用这种方式更清楚。你可以阅读更多关于^{} and ^{} here。简而言之,您的模型应该如下所示:

class Article(models.Model):
    publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE, related_name='articles')


class WebPageStat(models.Model):
    objects = WebPageStatManager()
    publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE, related_name='stats')
    score = models.BigIntegerField(default=0)

完成后,您的查询将通过以下代码执行:

Article.objects.filter(publisher__stats__score__gte=100)

简而言之,这个查询所做的就是选择每个发布者至少有一个得分大于或等于100的web页面stat的文章

相关问题 更多 >

    热门问题