Сложная сериализация 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, любая помощь / предложения помогут мне очень сильно. Спасибо