【问题标题】:queryset django relationship查询集 django 关系
【发布时间】:2013-08-26 21:37:06
【问题描述】:

我有两个模型:

class Income(models.Model):
    id = models.AutoField('ID', primary_key=True)
    date = models.DateField('Date', blank=True, null=True)
    user = models.ForeignKey(User, null=True, help_text="User Income")

class Invoice(models.Model):
    id = models.AutoField('ID', primary_key=True)
    income = models.ForeignKey(Income, null=True, blank=True, related_name='Income')
    user = models.ForeignKey(User, null=True, blank=True, related_name='User_Invoice')

我需要获取与任何“发票”无关的“收入”。我没有办法看到这个问题。非常感谢:)

【问题讨论】:

  • 不要在related_name中使用空格。
  • @karthikr 好吧,反正就是个例子

标签: python django model django-queryset


【解决方案1】:

使用__isnull过滤:

通常,Django 使用相关模型的小写名称自动跟随关系字段:

Income.objects.filter(invoice__isnull=True)

在这里,您已经指定了 related_name 属性,所以您需要使用它:

Income.objects.filter(Income__isnull=True)

请注意,这表明您在 Invoice 上的 income FK 的相关名称属性是向后的。我认为您根本没有理由设置related_name,但如果您确实需要,它应该描述发票与收入的关系,反之亦然。

【讨论】:

  • “收入”模型中不存在字段集“账单”。能一样吗?
  • @funktasmas 这是您收到的错误消息吗?您所显示的内容中没有提及账单。
  • 'bill' 是从哪里来的?您可以使用相关模型的小写名称过滤反向外键关系。 docs.djangoproject.com/en/dev/topics/db/queries/…
  • 是的,这会起作用。正如文档描述的那样:“它也可以反向工作。要引用“反向”关系,只需使用模型的小写名称即可。”
  • @karthikr 不幸的是我找不到解决这个问题的方法
猜你喜欢
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
  • 2020-05-03
  • 2013-06-08
  • 1970-01-01
  • 2011-09-20
相关资源
最近更新 更多