Записываемые вложенные сериализаторы для нескольких элементов для одного базового класса
Я следую руководству по написанию вложенного сериализатора. Раньше у меня был только один элемент в json-объекте, который был CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents
, и я смог правильно сохранить данные в базе данных. Я хочу добавить NetIncomeLoss
тем же способом, но сталкиваюсь с проблемой, описанной ниже. Может ли кто-нибудь указать мне, где моя ошибка? Я не могу найти документацию/пример или ответ в Интернете
TypeError: Basetable() получил неожиданные аргументы ключевого слова: 'NetIncomeLoss'
.
Serializer:
class PeriodSerializer(serializers.ModelSerializer):
instant = serializers.CharField(required=False, max_length=255)
startDate = serializers.CharField(required=False, max_length=255)
endDate = serializers.CharField(required=False, max_length=255)
class Meta:
model = Period
fields = "__all__"
extra_kwargs = {'cashcashequivalentsrestrictedcashandrestrictedcashequivalents_id': {
'required': False}, 'netincomeloss_id': {
'required': False}}
class CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsSerializer(serializers.ModelSerializer):
period = PeriodSerializer(many=False)
class Meta:
model = Cashcashequivalentsrestrictedcashandrestrictedcashequivalents
fields = ['decimals', 'unitRef', 'value', 'period']
class NetIncomeLossSerializer(serializers.ModelSerializer):
period = PeriodSerializer(many=False)
class Meta:
model = Netincomeloss
fields = ['decimals', 'unitRef', 'value', 'period']
class CashFlowSerializer(serializers.ModelSerializer):
CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents = CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsSerializer(
many=True)
NetIncomeLoss = NetIncomeLossSerializer(
many=True)
class Meta:
model = Basetable
fields = "__all__"
def create(self, validated_data):
itemOneData = validated_data.pop(
'CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents')
cashflow = Basetable.objects.create(**validated_data)
for data in itemOneData:
period_data = data.pop("period")
my_long_named_obj = Cashcashequivalentsrestrictedcashandrestrictedcashequivalents.objects.create(
basetable_id=cashflow, **data)
period_object = Period.objects.create(
cashcashequivalentsrestrictedcashandrestrictedcashequivalents_id=my_long_named_obj, **period_data
)
itemTwoData = validated_data.pop(
'NetIncomeLoss')
cashflow = Basetable.objects.create(**validated_data)
for data in itemTwoData:
period_data = data.pop("period")
my_long_named_obj = Netincomeloss.objects.create(
basetable_id=cashflow, **data)
period_object = Period.objects.create(
netincomeloss_id=my_long_named_obj, **period_data
)
return cashflow
Модель:
class Basetable(models.Model):
basetable = models.AutoField(primary_key=True)
CompanyId = models.IntegerField()
class Cashcashequivalentsrestrictedcashandrestrictedcashequivalents(models.Model):
cashtable = models.AutoField(
primary_key=True)
unitRef = models.CharField(max_length=100)
value = models.CharField(max_length=100)
decimals = models.CharField(max_length=100)
basetable_id = models.ForeignKey(Basetable, on_delete=models.CASCADE)
class Netincomeloss(models.Model):
netincomeloss_id = models.AutoField(primary_key=True)
unitRef = models.CharField(max_length=100)
value = models.CharField(max_length=100)
decimals = models.IntegerField()
basetable_id = models.ForeignKey(Basetable, on_delete=models.CASCADE)
class Period(models.Model):
period = models.AutoField(primary_key=True)
instant = models.CharField(blank=False, max_length=100)
startDate = models.CharField(blank=False, max_length=255)
endDate = models.CharField(blank=False, max_length=255)
cashcashequivalentsrestrictedcashandrestrictedcashequivalents_id = models.OneToOneField(
Cashcashequivalentsrestrictedcashandrestrictedcashequivalents, on_delete=models.CASCADE)
netincomeloss_id = models.OneToOneField(
Netincomeloss, on_delete=models.CASCADE)
Вид:
Спасибо за время и помощь