Как можно сериализовать эти JSON данные? (Django Rest Framework) - PullRequest
0 голосов
/ 08 февраля 2020

Как мне сериализовать это JSON?

{
    "Data":{
        "Age": 21,
        "Year": 2012,
        "Address": "123 Sesame"
    }, "Data2": {
        "Color": "Blue",
        "Number": 2,
        "Address": "123 Sesame"
    }
}

Мне нужна помощь с сериализаторами

from rest_framework import serializers
from .models import Data, DataTwo, Form

class DataSerializer(serializers.Serializer):
    Age = serializers.IntegerField(source='age')
    Year = serializers.IntegerField(source='year')
    Address = serializers.CharField(max_length=50, source='address')

    def create(self, validated_data):
        return Data.objects.create(**validated_data)

class DataTwoSerializer(serializers.Serializer):
    Color = serializers.CharField(max_length=50, source='color')
    Number = serializers.IntegerField(source='number')
    Address = serializers.CharField(max_length=50, source='address')

    def create(self, validated_data):
        return DataTwo.objects.create(**validated_data)

class FormSerializer(serializers.Serializer):
    Data = DataSerializer(source="*")
    Data2 = DataTwoSerializer(source="*")

    def create(self, validated_data):
        return Form.objects.create(**validated_data)

Также мои модели:

from django.db import models

# Create your models here.
class Data(models.Model):
    age = models.IntegerField()
    year = models.CharField(max_length=50)
    address = models.CharField(max_length=50)

class DataTwo(models.Model):
    color = models.CharField(max_length=50)
    number = models.IntegerField()
    address = models.CharField(max_length=50)

class Form(models.Model):
    data = models.ForeignKey(Data, default="null", on_delete=models.CASCADE)
    data_two = models.ForeignKey(DataTwo, default="null", on_delete=models.CASCADE)


Если Я просматриваю validated_data от FormSerializer и получаю следующее:

{'Data': OrderedDict([('age', 21), ('year', 2012), ('address', '123 Sesame')]), 'Data2': OrderedDict([('color', 'Blue'), ('number', 2), ('address', '123 Sesame')])}

У меня сложилось впечатление, что созданный сериализатор позаботится об этом. Я не уверен, как go об этом. Чувство действительно потеряно

...