在Django ORM中获取相关对象具有非空字段的所有对象?

时间:2016-08-29 13:47:43

标签: django django-models django-orm

我有两个型号:

Company:
  pk
  ...
Supplier:
  pk
  mobile_phone = models.CharField(max_length=200, default='', blank=True, verbose_name="Мобильный телефон")
  company_id
  ...

所以:

  • 公司可能有许多供应商
  • 供应商可能属于一个公司

如何让至少有一家供应商拥有非空白移动电话的所有公司?

尝试:

  1. return queryset.filter(suppliers__mobile_phone__iregex=r’^(?!\s*$).+’)返回带有重复项的查询集
  2. return queryset.exclude(suppliers__isnull=True).exclude(suppliers__mobile_phone__exact=‘’)当公司有2家供应商时,它们不起作用,其中有哪些供应商没有mobile_phone
  3. 感谢任何帮助//链接到文档。

2 个答案:

答案 0 :(得分:1)

如果您的mobile_phone可能为空,请不要使用default='',请使用null=True。然后你可以尝试:

Company.objects.filter(supplier__mobile_phone__isnull=False)

答案 1 :(得分:1)

如果选项1适用于您,减去它返回重复项的事实,您可以在字段上使用distinct(),例如文档说明:https://docs.djangoproject.com/en/1.10/ref/models/querysets/