RetrieveUpdateAPIView Field 'id'期望一个数字,但得到了<用户:克里斯>



我正在尝试更新客户与Django Rest框架,但我得到这个错误:

Field 'id' expected a number but got <User: Chris>.

'Chris'是用户的用户名。

如果我为序列化器删除'pk'和'accounts',这将不会是一个问题,但我需要这些属性为其他函数工作。

它说属性full_name从客户期望一个数字,但得到用户,这是有意义的,但我如何将其转换为用户'id'?

return f'{self.user.first_name} {self.user.last_name}' 
Error in formatting: TypeError: Field 'id' expected a number but got <User: Chris>.

这是我的基于类的视图使用RetrieveUpdateAPIView

class staff_customer_details(generics.RetrieveUpdateAPIView):
serializer_class = CustomerSerializer
permissions_classes = [permissions.IsAuthenticated, ]
queryset = Customer.objects.all()

,模型和序列化器是这样的:

class Customer(models.Model):
user        = models.OneToOneField(User, primary_key=True, on_delete=models.PROTECT)
rank        = models.CharField(choices=RANK_CHOICES, max_length=7)
personal_id = models.IntegerField(db_index=True)
phone       = models.CharField(max_length=35, db_index=True)
@property
def full_name(self) -> str:
return f'{self.user.first_name} {self.user.last_name}'

class CustomerSerializer (serializers.ModelSerializer):
user = serializers.PrimaryKeyRelatedField(read_only=True)
accounts = AccountSerializer(many=True, read_only=True)
class Meta:
fields = ('user', 'pk', 'rank', 'personal_id', 'phone', 'accounts',  'can_make_loan', 'full_name')
model = Customer

我认为原因是您在Customer模型的user字段中设置了primary_key = True

请删除该属性。然后django将在Customer模型中设置默认的primary_key字段,即id

CustomerSerializer中,将pk改为id

相关内容

最新更新