Используйте значение F для индексации jsonfield в django
Эй ребята,
Я разрабатываю веб-сайт 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')
при этом поле мнений - это мнение конкретного пользователя о разных авторах.
Например:
{ Shakespeare: 0.5, Voltaire: 0.6 }
Затем у меня есть listView BookListView, в котором я хочу запросить базу данных книг и упорядочить их по мнению текущего вошедшего пользователя об их авторе. В предыдущем примере это были бы сначала все книги Вольтера, а затем книги Шекспира.
Поэтому я придумал это в своем 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, но я не вижу, как это может работать, поскольку мнения являются плавающими (и, следовательно, могут принимать любые значения).
Заранее спасибо ^^
Что я уже пробовал:
В дополнение к тому, что выше, я попробовал использовать
KeyTextTransformно я не мог решить свою проблему таким образом.