我有一个模型,其中经过身份验证的用户是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')
答案 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