我有一个这样的模型:
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 的解决方案?
有,但它很丑陋:
return Product.objects.filter(**{'user': request.user}
if request.user.is_authenticated else **{})
我认为 if/else 解决方案更好。