在Django rest框架中调用save()进行发布的问题

时间:2018-09-09 12:41:41

标签: django django-models django-rest-framework

在序列化程序上调用save()返回以下错误:

index

views.py

Original exception was:
Traceback (most recent call last):
File "C:\Users\aditya\AppData\Local\conda\conda\envs\myDjangoEnv\lib\site-packages\rest_framework\serializers.py", line 940, in create

instance = ModelClass.objects.create(**validated_data)
File "C:\Users\aditya\AppData\Local\conda\conda\envs\myDjangoEnv\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Users\aditya\AppData\Local\conda\conda\envs\myDjangoEnv\lib\site-packages\django\db\models\query.py", line 417, in create
obj.save(force_insert=True, using=self.db)
TypeError: save() got an unexpected keyword argument 'force_insert'

model.py

def post(self,request):
    if request.method=='POST':
        serializer = invoiceSerializers(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

我无法理解为什么会发生这种情况以及如何解决。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:4)

Model的 save() 方法接受很少的关键字参数,例如force_insertusing等。但是,您不是在您的重写方法中接受这些参数。

因此,将您的save()方法更改为

class invoice(models.Model):
    .....
    .....
    .....
    # your code
    def save(self, *args, **kwargs):
        .....
        .....
        .....
        # your code
        super(invoice, self).save(*args, **kwargs)