【问题标题】:Django select count of same foreign keys within the same modelDjango在同一模型中选择相同外键的计数
【发布时间】:2021-09-23 02:07:42
【问题描述】:

我有这个模型:

class Content(models.Model):
    id = models.CharField(max_length=20, null=False, blank=False, primary_key=True, unique=True)

class File(models.Model):
    id = models.CharField(max_length=21, null=False, blank=False,
                          primary_key=True, unique=True)
    id_content = models.ForeignKey(Content, db_column="id_content",
                                   on_delete=models.CASCADE)

我想选择id 以及与此id 具有相同外键的其他文件的计数。我真的不知道在filterextra 等内部的何处定义此类查询。

我之前在这个 MySQL 查询中做过这个,但我正在寻找一个 Django 模型解决方案:

SELECT
    f1.`id` AS id,
    (SELECT COUNT(f2.`id_content`)
     FROM `file` AS f2 WHERE f2.`id_content` = f1.`id_content`) AS total
FROM
    `file` AS f1;

【问题讨论】:

  • 你目前有什么? idFile 对象?
  • 目前,我还没有建立任何语句,等待查询计算相同的外键。目前,我只有这个:File.objects.all().values("id")

标签: python mysql django django-models django-orm


【解决方案1】:

如果你有一个File 对象(例如my_file):

my_file.id_content.file_set.count()

如果你只知道id,你应该首先知道get File 实例:

my_file = File.objects.get(id=id)

并应用第一种方法。

话虽如此,不要以id_ 开头您的ForeignKey 字段名称。它使您的代码混乱。最好将其命名为 content,即

content = models.ForeignKey(Content, ...)

【讨论】:

  • 我更新了我的帖子并定义了内容模型。希望有帮助。我只想打印id 并与我的 MySQL 查询同时计算相同的外键。 ``
猜你喜欢
  • 2015-05-29
  • 2018-09-04
  • 1970-01-01
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
相关资源
最近更新 更多