django - 使用来自模型属性的数据返回响应时出现AttributeError?
问题描述
我得到的完整错误是这个。
Got AttributeError when attempting to get a value for field `name` on serializer `AccountSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `Ledger` instance.
Original exception text was: 'Ledger' object has no attribute 'name'.
这是包含我尝试使用的转移属性方法的 Account 模型。
class Account(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=50)
is_loan = models.BooleanField(default=False)
@classmethod
def create_account(cls, user, name):
cls(user=user, name=name).save()
@property
def balance(self):
return Ledger.objects.filter(account=self.pk).aggregate(models.Sum('amount'))['amount__sum'] or '0'
@property
def transfers(self):
return Ledger.objects.filter(account=self.pk).order_by("-timestamp")[:10]
def __str__(self):
return f"{self.user} – {self.name} – {self.pk} – {self.is_loan}"
这是我的序列化程序类。
class AccountSerializer(serializers.ModelSerializer):
class Meta:
model = Account
fields = '__all__'
这是视图方法。
class Transactions(APIView):
def get(self, request, pk):
account = Account.objects.get(pk=pk)
transactions = account.transfers
serializer = AccountSerializer(transactions, many=True)
return Response(serializer.data)
不太明白为什么这会返回错误,但是如果我将帐户变量放在 AccountSerializer 中,它就可以正常工作。
解决方案
在您的代码的视图方法(Transactions
类)中,
transactions = account.transfers
serializer = AccountSerializer(transactions, many=True)
account.transfers
返回一个Ledger
对象列表,然后您将传递给这些对象列表,AccountSerializer
但AccountSerializer
用于模型的序列化或反序列化,Account
而不是Ledger
.
class LedgerSerializer(serializers.ModelSerializer):
class Meta:
model = Ledger
fields = '__all__'
LedgerSerializer
您需要为您的Ledger
模型定义上述内容,并在您的Transactions
视图中使用它。
推荐阅读
- c# - 有没有办法从 wpf 应用程序中的 DataGridView 控件获取数据?
- jquery - 在多个选项卡集中定位一个选项卡集
- haskell - Haskell 类型类混淆,无法推断出推断类型
- oracle-sqldeveloper - 为什么 SQL Developer 不显示包代码?
- apache-camel - 骆驼 etcd 监视/获取操作因 sslContextParameter 而失败
- redis - PHP Redis Lua 的脚本问题
- android - 处理程序不从 removeCallbacksAndMessages() 方法中删除回调
- ruby-on-rails - 远程表单仅在重新加载页面后才有效
- django - 获取Typeerror:在django rest框架中编写测试用例以输入请求文件时,无法将str连接到字节?
- javascript - Vue-form-wizard:通过路由使标签索引动态化