<field> __ in = [None,...]不使用ForeignKey(...,null = True)</field>

时间:2013-12-10 21:50:35

标签: django

我有一个模特:

class Distributor(models.Model):
  user = models.ForeignKey(User,null=True)
  ...

我有两种分销商:用户=无的全球分销商和与特定用户关联的分销商。我有一个全球经销商foo,用户=无。我可以得到foo:

>>> d = Distributor.objects.get(user=None,name='foo')
>>> d
<Distributor: foo>
>>> d.user == None
True

假设我有一个用户棉花登录。我想搜索所有经销商,用户=无或用户=棉花。我的想法是使用Distributor.objects.filter(user__in=[None,cotton])。但是,这似乎不起作用:

 >>> d = Distributor.objects.get(user__in=[cotton,None],name='foo')
 Traceback (most recent call last):
  ...
 DoesNotExist: Distributor matching query does not exist.

令人惊讶的是,get(user=None, ...)get(user__in=[None], ...)失败时有效。我究竟做错了什么?我不应该期望这个有用吗?

目前我通过创建一个额外的用户来存储全局实例来解决这个问题。这与开发实例上的sqlite3有关。

1 个答案:

答案 0 :(得分:1)

您应该使用__isnull https://docs.djangoproject.com/en/dev/ref/models/querysets/#isnull

Distributor.objects.get(
    Q(user__isnull=True) | Q(user__in=[cotton]), name='foo')