如何在 Django 的序列化程序中使用主键

How to use Primary Key In a Serializer in Django

我的模特是

class UserInfo(models.Model):
    user = models.OneToOneField(User, unique=True)
    mobile_no = models.CharField(max_length=10, blank=True)

序列化器是:

class UserInfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserInfo
        fields = ('mobile_no','user')

但每当我尝试使用这个

serializer = UserInfoSerializer(data=data)
if serializer.is_valid():
   serializer.save()

没有保存数据,报错

有没有其他方法可以使用主键。

你应该使用PrimaryKeyRelatedField

将此添加到您的序列化程序

user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())

您的 UserInfoSerializer 应如下所示:

class UserInfoSerializer(serializers.ModelSerializer):
    user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())

    class Meta:
        model = UserInfo
        fields = ('mobile_no','user')

更新 如果要更新数据库中的现有对象,则必须将 model instance 作为参数传递给 UserInfoSerializer 构造函数。

user_info = self.get_object()
serializer = UserInfoSerializer(user_info, data=data)