Возврат всех значений в Map To Model Serializer
У меня есть следующий JSON
jsonData = {'CompanyId': '320193', 'CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents': [{'decimals': '-6', 'unitRef': 'usd', 'period': {'instant': '2020-09-26'}, 'value': '39789000000'}, {'decimals': '-6', 'unitRef': 'usd', 'period': { 'instant': '2019-09-28'}, 'value': '50224000000'}, {'decimals': '-6', 'unitRef': 'usd', 'period': { 'instant': '2018-09-29'}, 'value': '25913000000'}, { 'decimals': '-6', 'unitRef': 'usd', 'period': { 'instant': '2021-09-25'}, 'value': '35929000000'}], 'NetIncomeLoss': [{'decimals': '-6', 'unitRef': 'usd', 'period': {'startDate': '2020-09-27', 'endDate': '2021-09-25'}, 'value': '94680000000'}, {'decimals': '-6', 'unitRef': 'usd', 'period': {'startDate': '2019-09-29', 'endDate': '2020-09-26'}, 'value': '57411000000'}, {'decimals': '-6', 'unitRef': 'usd', 'period': {'startDate': '2018-09-30', 'endDate': '2019-09-28'}, 'value': '55256000000'}, {'decimals': '-6', 'unitRef': 'usd', 'period': {'startDate': '2020-09-27', 'endDate': '2021-09-25'}, 'segment': {'dimension': 'us-gaap:StatementEquityComponentsAxis', 'value': 'us-gaap:RetainedEarningsMember'}, 'value': '94680000000'}, { 'decimals': '-6', 'unitRef': 'usd', 'period': {'startDate': '2019-09-29', 'endDate': '2020-09-26'}, 'segment': { 'dimension': 'us-gaap:StatementEquityComponentsAxis', 'value': 'us-gaap:RetainedEarningsMember'}, 'value': '57411000000'}, { 'decimals': '-6', 'unitRef': 'usd', 'period': {'startDate': '2018-09-30', 'endDate': '2019-09-28'}, 'segment': { 'dimension': 'us-gaap:StatementEquityComponentsAxis', 'value': 'us-gaap:RetainedEarningsMember'}, 'value': '55256000000'}]}
Модель:
class CashFlow(models.Model):
Id = models.AutoField(primary_key=True)
Decimal = models.TextField(null=True)
UnitRef = models.TextField(null=True)
Period = models.TextField(null=True)
Value = models.TextField(null=True)
CompanyId = models.TextField(null=True)
CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents = models.TextField(
null=True)
NetIncomeLoss = models.TextField(null=True)
Serializer:
class CashFlowSerializer(serializers.ModelSerializer):
CompanyId = serializers.CharField()
PeriodInstant = serializers.CharField()
PeriodStartDate = serializers.CharField()
PeriodEndDate = serializers.CharField()
Decimal = serializers.CharField()
UnitRef = serializers.CharField()
Value = serializers.CharField()
CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents = serializers.CharField()
NetIncomeLoss = serializers.CharField()
class Meta:
model = CashFlowTable
fields = "__all__"
def create(self, validated_data):
print(**validated_data)
CashFlowTable.objects.create(**validated_data)
Вид:
@csrf_exempt
def companyApiCall(request):
if request.method == 'GET':
jsonData = ''
data = get10KDataGivenTicker('AAPL')
allFilings = itemgetter('filings')(data)
for item in allFilings:
cik = itemgetter('cik')(item)
linkToFilingDetails = itemgetter('linkToFilingDetails')(item)
jsonData = get_data(cik, linkToFilingDetails,
"StatementsOfCashFlows")
# print(jsonData)
finalJson = fixData(jsonData)
check = CashFlowSerializer(data=finalJson)
if (check.is_valid(raise_exception=True)):
print("ready to send to db")
check.save()
return JsonResponse(jsonData, safe=False)
def fixData(jsonData):
jsonDump = json.dumps(jsonData)
actualJson = json.loads(jsonDump)
finalObject = {}
finalObject['CompanyId'] = actualJson.get("CompanyId")
CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents = actualJson.get(
"CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents")
one = dataRepeat(CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents,"CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents")
print(one)
NetIncomeLoss = actualJson.get("NetIncomeLoss")
dataRepeat(NetIncomeLoss, "NetIncomeLoss")
return finalObject
def dataRepeat(item, property):
final = {}
for i in item:
jsonObject = {}
jsonObject['Decimals'] = i.get("decimals")
jsonObject['UnitRef'] = i.get("unitRef")
if (i.get("period").get("startDate")):
jsonObject['PeriodStartDate'] = i.get("period").get("startDate")
else:
jsonObject['PeriodStartDate'] = None
if (i.get("period").get("endDate")):
jsonObject['PeriodEndDate'] = i.get("period").get("endDate")
else:
jsonObject['PeriodEndDate'] = None
if (i.get("period").get("instant")):
jsonObject['PeriodInstant'] = i.get("period").get("instant")
else:
jsonObject['PeriodInstant'] = None
jsonObject[f"{property}"] = i.get("value")
#jsonObject.update(jsonObject)
#print(jsonObject)
ссылка на исполняемый файл : https://www.online-python.com/bUHIopzqam
Как я могу вернуть все данные из метода(ов), чтобы сделать полный JSON, чтобы я мог отправить его в сериализатор.
В настоящее время, если я печатаю в методе dataReturn
, я вижу все данные, но при возврате я получаю только одну запись.
Как я могу исправить формат, чтобы он прошел через ModelSerializer? Я попробовал метод dict.update()
для обновления объекта JSON, но он создал только новые словари. Я не уверен, правильно ли это?
Очень новичок в Django, любая помощь будет принята с благодарностью. Спасибо за ваше время.