![](/img/trans.png)
[英]How do I write a Django query that joins two tables without a common column and uses a formula to calculate time?
[英]How do I write a Django ORM query where the select table shares a common column with another table?
我正在使用Django和Python 3.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查询,该查询选择模型之一,但在共享列上进行联接,以便在“得分”字段中进行比较。 我尝试了以下内容,但可惜错误
Article.objects.filter(publisher=webpagestat.publisher, webpagestat.score__gte==100)
File "<input>", line 1
SyntaxError: positional argument follows keyword argument
如何在联接中包含“ WebPageStat”表?
通过使用跨越关系的查找,可以轻松地在Django中完成所需的操作。 在您的示例中,您需要添加一种在ORM中引用相关对象的方法。 这是通过设置在东德related_name
的属性ForeignKey
领域。 尽管这不是严格必需的,但以这种方式更加清楚。 您可以在此处了解有关related_name
和related_query_name
更多信息。 简而言之,您的模型应如下所示:
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的网页状态的每篇文章。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.