嵌套json字段上的Django order_by

2024-05-14 18:48:39 发布

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

我的模特都是这样的。在

class Foo():
    bar = models.ForeignKey('Bar', related_name='bar')
    payload = JSONField()

class Bar():
    candy = models.ForeignKey('Candy', related_name='candy')

class Candy():
    payload = JSONField()

我的queryset看起来像这样

^{pr2}$

到目前为止,我一直在努力

foo = foo.order_by(RawSQL("payload->>%s", ("age",))) #this works!!
foo = foo.order_by(RawSQL("bar.candy.payload->>%s", ("names[0].text",))) #does not work

第二个语句不起作用。我从这里得到了使用RawSQL的灵感 Django 1.9 JSONField order_by

我不知道如何导航到那个特定的类,然后执行查询。最好的办法是什么?在


Tags: namebyfoomodelsbarorderclasspayload
1条回答
网友
1楼 · 发布于 2024-05-14 18:48:39

如果使用RawSQL输入的内容必须是sql查询。输入的查询只选择Foo models对象。在

首先必须选择相关模型内容。在

foo = Foo.objects.select_related("bar__candy")

如果您输入

^{pr2}$

您可以看到输入的数据库查询和所有字段的名称

之后,您必须使用所选的输入字段名输入RawSQL。在

如果在查询中看到所有字段的名称都是格式的

"<table name>"."<field name>"

如果你的应用程序名是Main你在数据库中的糖果表名称是Main\u candy,那么你可以输入RawSQL:

foo = foo.order_by(RawSQL("main_candy.payload->>%s", ("names[0].text",))) 

而且它必须有效。在

相关问题 更多 >

    热门问题