在django query_set

时间:2018-04-19 18:43:59

标签: python django django-queryset

我有一个这样的模型:

class Product(models.Model):
    name = models.CharField(_('name'))
    ...
    user = models.ForeignKey(User, related_name='products', on_delete=models.CASCADE, verbose_name=_('user'))
    ...

我希望:

如果用户经过身份验证:

返回用户产品

否则,如果用户未进行身份验证:

退回所有产品

在linq C#中我们可以用以下方法解决这个问题:

Product.Where(!request.user.is_authenticated() || user.id == request.user.id)

我知道在python中可以使用if else来解决它:

if request.user.is_authenticated:
    return Product.objects.filter(user=request.user)

else:
    return Product.objects.all()

问题:有没有类似C#linq的解决方案?

1 个答案:

答案 0 :(得分:0)

有,但它很难看:

return Product.objects.filter(**{'user': request.user}
    if request.user.is_authenticated else **{})

我认为if / else解决方案更好。