Nad*_*sen 4 django django-serializer django-rest-framework
我希望能够查看客户的帐户。正如您所看到的,帐户具有客户的外键。这个想法是能够通过嵌套帐户对象查看客户信息,但这给了我一个错误
Got AttributeError when attempting to get a value for field `accounts_items` on serializer `CustomerSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `Customer` instance.
Original exception text was: 'Customer' object has no attribute 'Account'.
Run Code Online (Sandbox Code Playgroud)
就像这个例子一样,艺术家对象中的歌曲:

Got AttributeError when attempting to get a value for field `accounts_items` on serializer `CustomerSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `Customer` instance.
Original exception text was: 'Customer' object has no attribute 'Account'.
Run Code Online (Sandbox Code Playgroud)
####MODELS####
class Account(models.Model):
amount = models.FloatField(null=True)
name = models.CharField(max_length=40)
account_type = models.CharField(max_length=11, choices = ACCOUNT_TYPES)
customer_id = models.ForeignKey(Customer, on_delete = models.CASCADE, default = None)
bank_id = models.ForeignKey(Bank, on_delete = models.CASCADE, default = None)
def __str__(self):
return '{} {} {} {} {}'.format(self.amount, self.name, self.account_type, self.customer_id, self.bank_id)
class Customer(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=40)
phone = models.CharField(max_length=40)
email = models.EmailField(max_length = 100)
rank = models.CharField(max_length=11, choices = RANK_TYPES)
bank_id = models.ForeignKey(Bank, on_delete = models.CASCADE, default = None)
def __str__(self):
return '{} {} {} {} {} {} {}'.format(self.id, self.first_name, self.last_name, self.phone, self.email, self.rank, self.bank_id)
Run Code Online (Sandbox Code Playgroud)
###VIEW###
class customer_page(generics.RetrieveUpdateDestroyAPIView):
queryset = Customer.objects.all()
serializer_class = CustomerSerializer
Run Code Online (Sandbox Code Playgroud)
小智 5
您需要将序列化器更改为:
class AccountSerializer (serializers.ModelSerializer):
class Meta:
fields = ('id', 'amount', 'name', 'account_type', 'customer_id', 'bank_id')
model = Account
class CustomerSerializer (serializers.ModelSerializer):
accounts_items = serializers.SerializerMethodField()
class Meta:
fields = ('id', 'user', 'first_name', 'last_name', 'phone', 'email', 'rank', 'bank_id', 'accounts_items')
model = Customer
def get_accounts_items(self, obj):
customer_account_query = models.Account.objects.filter(
customer_id=obj.id)
serializer = AccountSerializer(customer_account_query, many=True)
return serializer.data
Run Code Online (Sandbox Code Playgroud)
这应该有效
| 归档时间: |
|
| 查看次数: |
14106 次 |
| 最近记录: |