Django Rest Framework извлекает вложенный JSONField с фильтрами

Я работаю над проектом с использованием Python(3.7), Django(1.11) и DRF(3.6), в котором мне нужно получить данные, отфильтрованные с помощью JSONField, из вложенного объекта.

Примечание: я много искал и нашел несколько относительных вопросов, но мой вопрос немного другой, так что не помечайте его как дубликат, пожалуйста!

Вот что я пробовал до сих пор:

От models.py:

class MyModel(models.Model):
    id = models.CharField(primary_key=True, max_length=255)
    type = models.CharField(max_length=255)
    actor = JSONField()
    repo =  JSONField()
    created_at = models.DateTimeField()

От serializers.py :

class MyModelSerializer(serializers.ModelSerializer):
    obj1 = serializers.JSONField()
    obj2 = serializers.JSONField()

    class Meta:
        model = MyModel
        fields = "__all__"

От urls.py :

url(r'^mymodel/obj1s/(?P<pk>[0-9]+)/$', views.ActorEvents.as_view(), name='get-actor')

** От views.py:

class Obj1Obj2(generics.RetrieveAPIView):
    serializer_class = MyModelSerializer

    def get_object(self):
        queryset = EventModel.objects.filter(actor__id=self.request.parser_context['kwargs']['id'])
        obj = get_object_or_404(queryset)
        return obj

и вот входной объект JSON:

{
  "id":4055191679,
  "type":"PushEvent",
  "obj1":{
    "id":2790311,
    "login":"daniel33",
    "avatar_url":"a_url"
  },
  "obj2":{
    "id":352806,
    "name":"NAME",
    "url":"a_url"
  },
  "created_at":"2015-10-03 06:13:31"
}

и чего я хочу достичь: он должен вернуть MyModel записи по obj1 ID и должен быть в состоянии вернуть массив JSON всех MyModel objects где obj1 ID по запросу GET на /mymodel/obj1s/<ID>, Если запрошенный obj1 не существует, тогда код ответа HTTP должен быть 404, в противном случае код ответа должен быть 200. Массив JSON должен быть отсортирован в порядке возрастания MyModel Я БЫ.

Ошибка обновления: вот ошибка, которую я получил:

django.core.exceptions.FieldError: Неподдерживаемый поиск 'id' для JSONField или присоединение к полю недопустимо. [18/Feb/2019 10:37:39] "GET /events/ актеры /2790311/ HTTP/1.1" 500 16210

0 ответов

Другие вопросы по тегам