我有以下模型-
class Review(BaseModel,EntityBaseClass):
review = models.TextField(null=True,blank=True)
reviewer = models.ForeignKey(User, related_name='reviewer', null=True, on_delete=models.SET_NULL)
anonymous_review = models.BooleanField(default=False)
我想要的是,如果我收到匿名= True的请求,则我不应该捕获用户详细信息,而只能捕获评论。
我想知道是否可以使用Django条件表达式来实现。 我尝试过-
user = request.user
Review.objects.create(review='some review', reviewer=Case(When(Q(params['anonymous_review']),then=user)),
anonymous_review = Case(When(Q(params['anonymous_review']),then=Value('True')), default=Value('False')))
但是,用户对象被转换为字符串,因此我收到错误消息,说审阅者必须是用户对象实例。 有没有办法解决? Django条件表达式不应该这样使用吗?
答案 0 :(得分:1)
有些人似乎忘记了Django的ORM只是关系数据库之上的一薄层,但是您显然明白了这一点-但恐怕您确实将它推得太远了;-)
您使用的表达式是用于复杂(选择)查询的SQL语法包装,它们不能替代基本的Python功能:
user = request.user
Review.objects.create(
review='some review',
reviewer=user if user.is_authenticated else None,
anonymous_review=user.is_anonymous
)