首页 > 解决方案 > save() 得到了一个意外的关键字参数“所有者”

问题描述

模型.py

class Video(models.Model):
obj = models.FileField()
owner = models.ForeignKey(Profile,on_delete=models.CASCADE)
dis = models.TextField()
title = models.ForeignKey(Title,on_delete=models.CASCADE,default=0)
def __str__(self):
    return self.dis

序列化程序.py

class VideoSerializer(serializers.ModelSerializer):
#owner = serializers.PrimaryKeyRelatedField(many=False, read_only=True)
class Meta:
    model = Video
    fields = ['obj','dis','owner','title']

def save(self,validated_data):
    request = self.context.get("request")
    v = Video(
        obj = validated_data.get('obj'),
        dis = validated_data.get('dis'),
        owner = Profile.objects.get(user=request.user),
        )
    v.save()
    return v
    

   

def update(self, instance, validated_data):
    request = self.context.get("request")
    instance.title = validated_data.get('title',instance.title)
    instance.dis = validated_data.get('dis', instance.dis)
    if instance.owner == request.user:
        instance.save()
        return instance

视图.py

class VideoView(viewsets.ModelViewSet):
serializer_class = VideoSerializer
queryset = Video.objects.all()

def perform_create(self, serializer):
    user = self.request.user
    serializer.save(owner=Profile.objects.get(user=user))

嗨,大家好!我尝试使用 DRF 序列化程序将模型保存在数据库中,但出现错误....如果您能帮助我,我将不胜感激。我的错误出现在序列化程序中的 save() 方法中

标签: django-rest-frameworkdjango-serializer

解决方案


您不应覆盖save方法定义中的参数。而是使用这个:

def save(self):
    owner = self.validated_data.get('owner')
    ...

参考: https ://www.django-rest-framework.org/api-guide/serializers/#overriding-save-directly


推荐阅读