更新序列化程序时,嵌套的serilizer没有实例(many = true)

时间:2015-03-12 13:58:57

标签: django django-rest-framework

我有UserSerializer和嵌套的UserClientSerializer。我正在尝试更新已登录用户的信息。但是我收到了unique_together验证错误。

我有以下型号: 的 models.py

class UserClients(models.Model):
    user = models.ForeignKey(User, related_name='user_clients')
    client = models.ForeignKey(Client, related_name='client_users')
    belongs_to = models.BooleanField(default=False)
    for_future = models.BooleanField(default=False)

    class Meta:
        unique_together = ('user', 'client')

我也有两个seralizers。 的 serializers.py

class UserClientsSerializer(serializers.ModelSerializer):

    class Meta:
        model = UserClients

class UserSerializer(serializers.ModelSerializer):
    user_clients = UserClientsSerializer(required=False, allow_null=True, many=True)
    class Meta:
        model = get_user_model()
        exclude = ('password','username', 'date_joined', 'is_superuser')
    @transaction.atomic
    def create(self, validated_data):
    ...
    @transaction.atomic
    def update(self, instance, validated_data):
    ...

views.py

class CurrentUserDetails(RetrieveUpdateAPIView):

    serializer_class = UserSerializer
    permission_classes = (IsAuthenticated,)

    def get_object(self):
        return self.request.user

因此,当我尝试更新我的用户数据时,例如“belongs_to”为False,我想将其更改为False。 我的JSON数据是这样的。

{
"user_clients": [
    {
        "id": 57, 
        "belongs_to": true, 
        "for_future": false, 
        "user": 25, 
        "client": 3
    }
]
}

但我收到像这样的验证错误

{
    "user_clients": [
        {
            "non_field_errors": [
                "The fields user, client must make a unique set."
            ]
        }
    ]
}

你对这个问题有什么看法吗?

1 个答案:

答案 0 :(得分:1)

此链接上的第二篇文章似乎可能描述了一个类似的问题和可能对您有用的潜在解决方法:

https://github.com/tomchristie/django-rest-framework/issues/2380

您似乎正在尝试创建一个新对象,而不是更新旧对象,这就是您获得唯一错误的原因。

如果不是这种情况,请尝试关闭验证并使用您自己的验证,如上面的链接所述。

相关问题