【问题标题】:Django query: Item in model who is not in other modelDjango查询:模型中的项目不在其他模型中
【发布时间】:2020-09-10 00:47:45
【问题描述】:

Noob Django ORM 问题在这里:

我有一个类似的模型:

class Company(models.Model):
    id = models.PositiveIntegerField(null=False, blank=False, primary_key=True)
    name = models.CharField(max_length=255, null=True, blank=True, default="")

class Audited(models.Model):
    company = models.ForeignKey(
        Company,
        null=False,
        blank=False,
        on_delete=models.CASCADE,
        related_name="logs"
    )
    city = models.CharField(null=False, blank=False, max_length=255)

我一直在为这个问题摸不着头脑,我不知道如何解决它。

给定一个城市,我需要没有在那个城市被审计的公司,所以基本上是没有在那个城市审计的记录的公司。

因此,例如,如果城市是纽约,并且没有在像 Oracle 这样的公司和纽约这样的公司进行审计的记录,我会收到 Oracle。

这让我很困惑,因为 ORM 似乎是为积极关系而设计的,例如“表 A 中的项目在表 B 上有记录”,而这恰恰相反。 任何线索我该怎么做?

【问题讨论】:

  • 我假设可以有多个个副本?
  • 是的,可以有多家公司,但我总是需要第一个,因为之后我会将行添加到 Audited(例如,Oracle-New York),所以下次我要求下一家在纽约审计的公司,甲骨文将被忽略。表满后(例如,所有公司都有纽约的记录),我必须使用其他逻辑(公司在那个日期最旧的城市进行审计)
  • 您应该从 Company 模型中删除 id 字段,因为 django 会自动创建一个。

标签: django django-models orm


【解决方案1】:

您可以使用.exclude(…) [Django-doc]进行过滤:

Company.objects.<b>exclude(logs__city=<i>my_city</i>)</b>

因此,您将保留Companys,对于给定的my_city,不存在Audited

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    相关资源
    最近更新 更多