Почему данные, передаваемые в сериализатор, сохраняются в базе данных как null?
Я работал над проектом Django с сериализатором rest framework для получения информации, отправленной с фронтенда, ее упорядочивания и сохранения в базе данных. Информация получается путем обводки полей ввода на формах и отправки всех полей, которые вы определяете. Однако после определения DataSerializer(data=data).
как будто данные на самом деле не используются.Пример request.data = {'TextField': [], 'DateField': [], 'SignatureField': [['FieldName', [129, 79], [138, 35], 'Form.jpg']]}
Вот мой сериализатор:
Class DataSerializer(serializers.ModelSerializer):
class Meta:
model = FormData
fields = ["FieldName", "StartX", "StartY", "width", "height", "JSONData", "FormType"]
def create(self, **validated_data):
print(**validated_data)
return FormData.objects.create(**validated_data)
Вот мой пост Просмотр
@api_view(['POST'])
def create_list(request):
if request.method == 'POST':
dataDict = request.data
for info in dataDict:
Field = dataDict[info]
stringDict = str(dataDict)
for object in Field:
datadict = {
"FieldName": object[0],
"StartX": object[1][0],
"StartY": object[1][1],
"width": object[2][0],
"height": object[2][1],
"JSONData": stringDict,
"FormType": object[3]
}
serializer = DataSerializer(data=datadict)
if serializer.is_valid():
serializer.create()
return JSONResponse(serializer.data, status=201)
print(serializer.errors)
return Response("Not Valid")
Вот моя модель, которая была модифицирована, чтобы принимать нулевые значения, чего не будет после того, как я разберусь с этим.
class FormData(models.Model):
FieldName = models.CharField(max_length=100)
StartX = models.IntegerField(null=True)
StartY = models.IntegerField(null=True)
width = models.IntegerField(null=True)
height = models.IntegerField(null=True)
JSONData = models.CharField(max_length=500)
FormType = models.CharField(max_length=100)
Хотя он не способен обрабатывать более одного прямоугольника, нарисованного в качестве входных данных, я просто пытаюсь понять, как обработать request.data, организовать его и сохранить. Однако все, что я получаю, это Null или отсутствующие значения в базе данных без каких-либо ошибок, выводимых обратно.
Попытки отладки
Когда я пытался разобраться в этом, у меня было несколько идей, в чем проблема. Одна из них заключалась в логике циклов for, определяющих данные как null, но после кодирования print(serializer.data) после if serializer.is_valid() он возвращает то, что я хочу, чтобы он прочитал.
{'FieldName': 'FieldNamedefinedbyuser', 'StartX': 246, 'StartY': 108, 'width': 345, 'height': 80, 'JSONData': "{'TextField': [], 'DateField': [], 'SignatureField': [['asdfasdfsadf', [246, 108], [345, 80], 'Darthvad.jpg']]}", 'FormType': 'Form.jpg'}
Так что я не думаю, что дело в этом. Затем я подумал, что словарь данных должен быть JSON, потому что каждый другой пример create использует DataSerializer(data=request.data), но это также не сработало, потому что он вернул ошибку, говоря, что ожидает словарь, но получил код str.
Код:
Json_object = json.dumps(data, indent=4)
serializer = DataSerializer(data=Json_object)
Ошибка: {'non_field_errors': [ErrorDetail(string='Неверные данные. Ожидался словарь, а получилась строка.', code='invalid')]}
Возможно, это из-за того, как я превращаю словарь в JSON, но request.data, похоже, не является JSON, хотя я отправляю его через Fetch Api из javascript. В этом может быть проблема, но я понятия не имею.
Кроме того, печать **validated_data на терминал дает мне некоторое представление о проблеме, поскольку она полностью нулевая. Так что мой лучший гость имеет отношение к тому, как я обрабатываю данные, которые помещаются в сериализатор, вызывая некоторую проблему. Могу ли я получить какое-то направление?