如何在Django中的串行器中使用主键

Ash*_*rma 3 django django-serializer django-rest-framework

我的模型是

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

和serialzer是:

class UserInfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserInfo
        fields = ('mobile_no','user')
Run Code Online (Sandbox Code Playgroud)

但每当我试图使用它

serializer = UserInfoSerializer(data=data)
if serializer.is_valid():
   serializer.save()
Run Code Online (Sandbox Code Playgroud)

它不保存数据并给出错误.

是否有任何方法可以使用其他方法来使用主键.

Mus*_*han 5

您应该使用PrimaryKeyRelatedField

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

user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())
Run Code Online (Sandbox Code Playgroud)

UserInfoSerializer应该看起来像:

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

    class Meta:
        model = UserInfo
        fields = ('mobile_no','user')
Run Code Online (Sandbox Code Playgroud)

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

user_info = self.get_object()
serializer = UserInfoSerializer(user_info, data=data)
Run Code Online (Sandbox Code Playgroud)