Я работаю над проектом с использованием Python (3), Django (1.11) и DRF, в котором мне нужно отфильтровать данные на основе поля объекта json
, которое сохраняется как 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
Он должен возвращать записи MyModel на props ID
и должен иметь возможность возвратамассив JSON из всех MyModel objects
, где props ID
по запросу GET в /mymodel/props/<ID>
.Если запрошенный props
не существует, тогда код ответа HTTP должен быть 404, в противном случае код ответа должен быть 200. Массив JSON должен быть отсортирован в порядке возрастания по идентификатору MyModel.
Когда яотправив запрос на это представление, он возвращает ошибку:
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
?
Помогите мне, пожалуйста!Заранее спасибо!