【发布时间】:2019-07-11 17:40:05
【问题描述】:
我正在使用 Python(3)、Django(1.11) 和 DRF 开发一个项目,其中我必须在 json 对象字段的基础上过滤数据,该字段在 db 模型中保存为 JSONFIELD .
这是我尝试过的:
# model.py
from django.db import models
import jsonfield
class MyModel(models.Model):
id = models.CharField(primary_key=True, max_length=255)
type = models.CharField(max_length=255)
props = jsonfield.JSONField()
repo = jsonfield.JSONField()
created_at = models.DateTimeField()
# serializers.py
class MyModelSerializer(serializers.ModelSerializer):
props = serializers.JSONField()
repo = serializers.JSONField()
class Meta:
model = EventModel
fields = "__all__"
# JSON object
{
"id":4633249595,
"type":"PushEvent",
"props":{
"id":4276597,
"login":"iholloway",
"avatar_url":"https://avatars.com/4276597"
},
"repo":{
"id":269910,
"name":"iholloway/aperiam-consectetur",
"url":"https://github.com/iholloway/aperiam-consectetur"
},
"created_at":"2016-04-18 00:13:31"
}
# views.py
class PropsEvents(generics.RetrieveAPIView):
serializer_class = MyModelSerializer
def get_object(self):
print(self.request.parser_context['kwargs']['id'])
queryset = MyModel.objects.filter(data__props__id=self.request.parser_context['kwargs']['id'])
obj = get_object_or_404(queryset)
return obj
它应该通过
props ID返回 MyModel 记录并且应该能够 返回所有MyModel objects的 JSON 数组,其中props ID由/mymodel/props/<ID>的 GET 请求。如果请求的props没有 如果存在,则 HTTP 响应代码应为 404,否则,响应 代码应为 200。 JSON 数组应按升序排序 按 MyModel ID。
当我向这个视图发送请求时,它返回一个错误:
> django.core.exceptions.FieldError: Unsupported lookup 'id' for JSONField or join on the field not permitted.
> [18/Feb/2019 10:37:39] "GET /events/actors/2790311/ HTTP/1.1" 500 16210
那么,如何根据id of props 过滤对象?
请帮帮我! 提前致谢!
【问题讨论】:
-
我投票结束这个问题,因为你已经在这里问了同样的问题:stackoverflow.com/questions/54744169/…
标签: python django django-rest-framework django-filter drf-queryset