Django Rest Framework嵌套序列化程序给出属性错误

问题描述

我正在尝试在下面发布模型和序列化器的位置设置嵌套序列化器。为什么会出现以下错误

Got AttributeError when attempting to get a value for field `balance_sheet` on serializer `StockSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `Stock` instance.
Original exception text was: 'Stock' object has no attribute 'balance_sheet'.

serializers.py

class StockSerializer(serializers.ModelSerializer):
    income_statement = IncomeStatementSerializer(many=True)
    balance_sheet = BalanceSheetSerializer(many=True)
    cashflows_statement = CashflowsstatementSerializer(many=True)

    def create(self,validated_data):
        temp_income_statement_data = validated_data.pop("income_statement")
        temp_balance_sheet_data = validated_data.pop("balance_sheet")
        temp_cashflows_statement_data = validated_data.pop("cashflows_statement")
        new_stock = Stock.objects.create(**validated_data)
        for i in temp_income_statement_data:
            IncomeStatement.objects.create(**i,ticker=new_stock)
        for x in temp_balance_sheet_data:
            BalanceSheet.objects.create(**x,ticker=new_stock)
        for y in temp_cashflows_statement_data:
            Cashflowsstatement.objects.create(**y,ticker=new_stock)
        return new_stock

IncomeStatementSerializerBalanceSheetSerializerCashflowsstatementSerializer都是典型的ModelSerializer

models.py

class Stock(models.Model):

    id = models.UUIDField(default=uuid.uuid4,editable=False,unique=True)
    ticker = models.CharField(max_length=10,unique=True,primary_key=True)
    slug = models.SlugField(default="",editable=False)

    def save(self,*args,**kwargs):
        value = self.ticker
        self.slug = slugify(value,allow_unicode=True)
        super().save(*args,**kwargs)

    def __str__(self):
        return self.ticker

    class Meta:
        verbose_name = "stock"
        verbose_name_plural = "stocks"
        ordering = ["ticker"]

IncomeStatementBalanceSheetCashflowsstatement都是典型的models.Model,与ForeignKeyStock关系

views.py

class StockList(generics.ListCreateAPIView):
    queryset = Stock.objects.all()
    serializer_class = StockSerializer
    lookup_field = "slug"

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)