问题描述
我正在尝试在下面发布模型和序列化器的位置设置嵌套序列化器。为什么会出现以下错误?
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
IncomeStatementSerializer
,BalanceSheetSerializer
和CashflowsstatementSerializer
都是典型的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"]
IncomeStatement
,BalanceSheet
和Cashflowsstatement
都是典型的models.Model
,与ForeignKey
有Stock
关系
views.py
class StockList(generics.ListCreateAPIView):
queryset = Stock.objects.all()
serializer_class = StockSerializer
lookup_field = "slug"
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)