如何将self.request.user作为更新字段传递?

时间:2019-09-01 10:16:49

标签: django-models django-rest-framework

我有一个模型,其中经过身份验证的用户是FK字段。我遇到通过UpdateModelMixin调用self.partial_update的问题,因为用户字段不能为空。

我相信这种情况会在无法更新并退回到创建时发生。仅在创建时如何将user = self.request.user作为参数传递?

我尝试修改request.data字典,但这显然是不可变的

编辑:字段user和a类似于其他字段的复合主键,因此我在序列化程序中将它们设置为read_only。该API从不处理model_id pk。

class MView(generics.UpdateAPIView, mixins.UpdateModelMixin):    
    def get_object(self):
        a_check = self.request.data.get('a') #Other validity checks but I removed it for simplicity
        if a_check:
            return models.M.objects.filter(user=self.request.user,a=a).first()
    def put(self, request, *args, **kwargs):
        try:
            #request.data.update({'user':self.request.user})
            print(request.data)
            return self.partial_update(request, *args, **kwargs)

class M(models.Model):
    user = models.ForeignKey(CustomUser,on_delete='CASCADE')
    ...

class MSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.M
        fields = ('a','b','c')
        read_only_fields = ('user', 'a')

2 个答案:

答案 0 :(得分:0)

一种可能的解决方案是从mixins.UpdateModelMixin生命周期覆盖$table = "settings"; $table = $mysqli->real_escape_string($table); 函数。检查更新功能link

update

答案 1 :(得分:0)

最终通过覆盖序列化程序中的create / update方法来解决该问题

def create(self, validated_data):
        instance = M.objects.create(user=self.context['request'].user,
                                 **validated_data)
        return instance
相关问题