Использование условного выражения Django при вставке строки - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть следующая модель -

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 не должно использоваться таким образом?

1 Ответ

0 голосов
/ 14 февраля 2019

Некоторые люди, кажется, забыли, что ORM в Django - это просто тонкий слой над реляционной БД, но вы, очевидно, поняли это - но я боюсь, что вы продвигаете его, но слишком далеко; -)

Используемые вами выражения являются обертками вокруг синтаксиса SQL для сложных (избранных) запросов, они не заменяют базовые возможности Python:

user = request.user

Review.objects.create(
    review='some review', 
    reviewer=user if user.is_authenticated else None, 
    anonymous_review=user.is_anonymous
    ) 
...