Используйте значение F как ключ dict для заказа django - PullRequest
0 голосов
/ 03 августа 2020

Я разрабатываю веб-сайт Django, и у меня есть следующие модели (упрощенные):

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    opinions = JSONField(default=default_opinions)

class Author(models.Model):
    name = models.CharField(max_length=50, unique=True)

class Book(models.Model):
    author = models.ForeignKey(Author, on_delete=models.CASCADE, default='0')

с полем мнений, которое представляет собой мнение конкретного c пользователя от разных авторов: Пример:

{
   Shakespeare: 0.5,
   Voltaire: 0.6
}

Затем у меня есть listView BookListView, в котором я хочу запросить базу данных Book и упорядочить их по мнению текущего зарегистрированного пользователя об их авторе. В предыдущем примере это были бы сначала все книги Вольтера, а затем Шекспира.

Итак, я нашел это в моем listView:

def get_queryset(self):
    user_opinions = self.request.user.profile.opinions
    queryset = Book.objects.order_by(user_opinions[F("author__name")])
    return queryset

Проблема в том, что значение F равно вычисляется после get_queryset (), поэтому я получаю F ("author__name"), ошибка не существует.

Я думал об итерации по ключам и значениям dict, но не понимаю, как это может сработать, поскольку мнения являются плавающими (и поэтому могут принимать любые значения).

Заранее спасибо ^^

1 Ответ

0 голосов
/ 03 августа 2020
Выражения

F не поддерживают поиск по полю JSON, поэтому вы получаете сообщение об ошибке. Ключ не существует, потому что он пытается найти поле с этим именем и запускает соединение в этом поле. Не могли бы вы подробнее рассказать о том, что пара ключ и значение находятся в json Поле

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...