Я разрабатываю веб-сайт 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, но не понимаю, как это может сработать, поскольку мнения являются плавающими (и поэтому могут принимать любые значения).
Заранее спасибо ^^