Сложная сериализация JSON в Django

У меня есть сложный JSON (обрезанный)

Я создал следующий класс для использования, чтобы легче было массировать данные в

@dataclass
class Period:
    instant: str
    startDate: str
    endDate: str

    @staticmethod
    def from_dict(obj: Any) -> "Period":
        _instant = str(obj.get("instant"))
        _startDate = str(obj.get("startDate"))
        _endDate = str(obj.get("endDate"))
        return Period(_instant, _startDate, _endDate)


@dataclass
class Segment:
    dimension: str
    value: str

    @staticmethod
    def from_dict(obj: Any) -> "Segment":
        if (obj):
            _dimension = str(obj.get("dimension"))
            _value = str(obj.get("value"))
            return Segment(_dimension, _value)


@dataclass
class ShareBasedCompensation:
    decimals: str
    unitRef: str
    period: Period
    value: str

    @staticmethod
    def from_dict(obj: Any) -> "ShareBasedCompensation":
        _decimals = str(obj.get("decimals"))
        _unitRef = str(obj.get("unitRef"))
        _period = Period.from_dict(obj.get("period"))
        _value = str(obj.get("value"))
        return ShareBasedCompensation(_decimals, _unitRef, _period, _value)


@dataclass
class CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalent:
    decimals: str
    unitRef: str
    period: Period
    value: str

    @staticmethod
    def from_dict(obj: Any) -> "CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalent":
        _decimals = str(obj.get("decimals"))
        _unitRef = str(obj.get("unitRef"))
        _period = Period.from_dict(obj.get("period"))
        _value = str(obj.get("value"))
        return CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalent(_decimals, _unitRef, _period, _value)


@dataclass
class NetIncomeLoss:
    decimals: str
    unitRef: str
    period: Period
    value: str
    segment: Segment

    @staticmethod
    def from_dict(obj: Any) -> "NetIncomeLoss":
        _decimals = str(obj.get("decimals"))
        _unitRef = str(obj.get("unitRef"))
        _period = Period.from_dict(obj.get("period"))
        _value = str(obj.get("value"))
        _segment = Segment.from_dict(obj.get("segment"))
        return NetIncomeLoss(_decimals, _unitRef, _period, _value, _segment)


@dataclass
class Company:
    CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents: List[
        CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalent]
    NetIncomeLoss: List[NetIncomeLoss]

    @staticmethod
    def from_dict(obj: Any) -> "Company":
        _CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents = [CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalent.from_dict(
            y) for y in obj.get("CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents")]
        _NetIncomeLoss = [NetIncomeLoss.from_dict(
            y) for y in obj.get("NetIncomeLoss")]
        return Company(_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents, _NetIncomeLoss)

У меня есть следующая Модель и Сериализатор

class CashFlow(models.Model):
    Id = models.AutoField(primary_key=True)
    CompanyId = models.ForeignKey(Company, on_delete=models.CASCADE)
    PeriodInstant = models.DateTimeField()
    PeriodStartDate = models.DateTimeField()
    PeriodStartDateEndDate = models.DateTimeField()
    Currency = models.TextField()
    Decimals = models.IntegerField()
    CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents = models.TextField(
        null=True)
    NetIncomeLoss = models.TextField(null=True)

class CashFlowSerializer(serializers.ModelSerializer):
    class Meta:
        model = CashFlow
        fields = ('CompanyId',
                  'PeriodInstant',
                  'PeriodStartDate',
                  'PeriodStartDateEndDate',
                  'Currency',
                  'Decimals',
                  'CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents',
                  'NetIncomeLoss')

Я перебираю списки, но не могу понять, как сохранить данные в базу данных.

def get_data(url, dataset_to_retrieve):
    jsonstring = json.loads(jsonData)
    companyData = Company.from_dict(jsonstring[0])

    for item in companyData.CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents:
        CashFlow.CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents = item.value
        test1(item)
        CashFlowSerializer
    for item in companyData.NetIncomeLoss:
        CashFlow.NetIncomeLoss = item.value
        test1(item)

def test1(item):
    CashFlow.CompanyId = 1
    CashFlow.PeriodInstant = item.period.instant
    CashFlow.PeriodStartDate = item.period.startDate
    CashFlow.PeriodStartDateEndDate = item.period.endDate
    CashFlow.Currency = item.unitRef
    CashFlow.Decimals = item.decimals

Я очень новичок в Django, любая помощь / предложения помогут мне очень сильно. Спасибо

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