我有一个模特:
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有关。
答案 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')