使用F值作为dict键来订购Django

2024-09-30 07:30:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发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键和值,但我不知道这是如何工作的,因为意见是浮动的(因此可以接受任何值)

提前谢谢^^


Tags: namedefaultmodelonmodelsdeleteclasscascade
1条回答
网友
1楼 · 发布于 2024-09-30 07:30:56

F表达式不支持JSON字段查找,这就是为什么您得到的错误键不存在的原因,因为它正在尝试查找名为的字段并在该字段上运行join, 您能详细说明json字段中有哪些键和值对吗

相关问题 更多 >

    热门问题