Как сериализовать поле Hstore в drf - PullRequest
1 голос
/ 18 марта 2019

У меня есть HStoreField в моей модели.Пример:

attributes = HStoreField(default=dict, blank=True)

Мой взгляд и сериализатор:

class CarSerializer(serializers.ModelSerializer):

    class Meta:
        model = Car
        fields = "__all__"
class CarViewSet(viewsets.ModelViewSet):
    queryset = Car.objects.all()
    serializer_class = CarSerializer
    model = Car

ОК.Когда я пытаюсь выполнить несколько тестов, таких как:

@pytest.fixture
def create_car(client):
    response = client.post(
        '/myapi/v1/car/',
        data={
            'name': "Ford Mustang",
            'price': 2000,
            'attributes': {"key": "value"},
        },
        format='json',
    )
    return response

@pytest.mark.django_db
def test_car_view(client, create_car):
    response = create_car
    response_get = client.get(f'/myapi/v1/car/{response.data["id"]}/')
    assert response_get.status_code == 200

Я получаю эту ошибку:

self = HStoreField(required=False), value = '"key"=>NULL'

    def to_representation(self, value):
        """
        List of object instances -> List of dicts of primitive datatypes.
        """
        return {
            six.text_type(key): self.child.to_representation(val) if val is not None else None
>           for key, val in value.items()
        }
E       AttributeError: 'str' object has no attribute 'items'

В поисках информации об этой проблеме я нашел ссылки на использование DictField для работы с HStoreField.Но я не нашел примеров.У кого-нибудь есть идеи или примеры?

1 Ответ

1 голос
/ 18 марта 2019

Я понял!

Мне нужно было установить атрибуты как JSONField.

Мое решение:

class CarSerializer(serializers.ModelSerializer):

    attributes = serializers.JSONField()

    class Meta:
        model = Car
        fields = "__all__"
...