Сериализатор Django не сохраняет данные в базе данных

я хочу сохранить модель в sqlite test-db, но результат сохранения - пустая строка в db с автоматически увеличивающимся индексом строки. остальная часть строки - NULL.

я потратил много времени на решение проблемы, но ничего не нашел. после вызова метода save() данные исчезли -> см. печать ниже.

ясно, что ответ выбрасывает эту ошибку - я думал, что dictObj будет автоматически преобразован в json. и я готов поспорить, что когда serilized.data будет иметь правильную форму объекта, он будет работать.

Вот код:

class Hopper(models.Model):
    # Relationships
    id = models.IntegerField
    open_positions_count = models.TextField
    name = models.TextField
    exchange = models.TextField
    hopper_id = models.TextField
    subscription_id = models.TextField
    plan_id = models.TextField
    payment_term = models.TextField
    payment_method_id = models.TextField
    ... # shortened
class HopperSerializer(serializers.ModelSerializer):
    class Meta:
        model = Hopper
        fields = ['id',
                  'open_positions_count',
                  'name',
                  'exchange',
                  'hopper_id',
                  'subscription_id',
                  'plan_id',
                  'payment_term',
                  'payment_method_id',
                  ... # shortened
                  ]

Views.hopper получает объект hopperObject как jsonObject:

@api_view(('POST', 'GET'))
@csrf_exempt
def hopper(request):

    if request.method == 'POST':
        data = request.data

        serializer = HopperSerializer(data=data)
        print(serializer.initial_data)

        if serializer.is_valid():
            serializer.save()
            print(serializer.initial_data)
            print(serializer.data)
            return Response(serializer.data, status=status.HTTP_201_CREATED) # Throws -> TypeError: Object of type type is not JSON serializable

        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Первая и вторая печать одинаковы:

{'id': 'X', 
'open_positions_count': 'X', 
'name': 'X', 
'exchange': 'X', 
'hopper_id': 'X', 
'subscription_id': 'X', 
'plan_id': 'X', 
'payment_term': 'X', 
'payment_method_id': 'X',
... # shortened
}

Это последняя печать:

'id': 2, # is is the only value ( in my case the id of the incoming obj should be the id and not an auto increment id)
'open_positions_count': <class 'django.db.models.fields.TextField'>, 
'name': <class 'django.db.models.fields.TextField'>, 
'exchange': <class 'django.db.models.fields.TextField'>, 
'hopper_id': <class 'django.db.models.fields.TextField'>, 
'subscription_id': <class 'django.db.models.fields.TextField'>, 
'plan_id': <class 'django.db.models.fields.TextField'>, 
'payment_term': <class 'django.db.models.fields.TextField'>, 
'payment_method_id': <class 'django.db.models.fields.TextField'>, 
... # shortened
}

добрые пожелания

Вам нужен метод create в вашем сериализаторе для сохранения данных:

class HopperSerializer(serializers.ModelSerializer):
    class Meta:
        model = Hopper
        fields = ['id',
                'open_positions_count',
                'name',
                'exchange',
                'hopper_id',
                'subscription_id',
                'plan_id',
                'payment_term',
                'payment_method_id',
                ... # shortened
                ]    


    def create(self, validated_data):
        """
        Create and return a new Hopper instance, given the validated data.
        """
        return Hopper.objects.create(**validated_data)

Вчера я обнаружил, что забыл скобки в модели. Мой линтер не работает

old:

    open_positions_count = models.TextField

new:

    open_positions_count = models.TextField()

Вернуться на верх