django rest框架中Serializer中OneToOne Field的问题

时间:2014-12-15 14:59:44

标签: python django django-rest-framework

我通过一对一的关系建立了与用户模型相关的模型 UserProfile

UserProfileSerializer 已正确定义,并且可以很好地序列化 userprofile 对象。

from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.OneToOneField(User, primary_key=True)
    country = models.CharField(max_length=255)

class UserProfileSerializer(serializers.ModelSerializer):

    class Meta:
        model = UserProfile
        fields = ('user','country')

但是在传递数据时会给出错误 {'用户':['此字段是必需的']}。

>>> s = UserProfileSerializer(data = {'user':1,'country':'YY'} )

>>> s.is_valid()  
False

>>> s.errrors
{'user':['This field is required']}

1 个答案:

答案 0 :(得分:1)

这可能为时已晚,无法提供帮助,而且我不确定您要尝试做什么,但请尝试在序列化程序中设置user字段以使用PrimaryKeyRelatedField以便您可以代表具有ID的用户,或者如果您只想更新user内容,则将readonly字段设置为UserProfile。如果您不想使用主键,则其他关系字段为here

如果您将user字段更改为PrimaryKeyRelatedField,并且您希望用户数据按原样返回,则可能需要生成两个UserProfile序列化程序 - 一个用于写入操作,另一个用于写入操作阅读在createupdate之后,您可以切换到读取序列化程序以填充响应。