我正在开发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键和值,但我不知道这是如何工作的,因为意见是浮动的(因此可以接受任何值)
提前谢谢^^
F表达式不支持JSON字段查找,这就是为什么您得到的错误键不存在的原因,因为它正在尝试查找名为的字段并在该字段上运行join, 您能详细说明json字段中有哪些键和值对吗
相关问题 更多 >
编程相关推荐