Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-TypeError-save()得到一个意外的关键字参数';强制插入';_Python_Django - Fatal编程技术网

Python Django-TypeError-save()得到一个意外的关键字参数';强制插入';

Python Django-TypeError-save()得到一个意外的关键字参数';强制插入';,python,django,Python,Django,我是Django的新手,我不知道这个错误。请帮忙。它给出了TypeError-save()得到了一个意外的关键字参数“force\u insert”。我测试了下面的代码,他们能够保存新的用户注册,但现在它不再保存了 下面是views.py的一部分,我认为它有一些问题: from django.shortcuts import render, redirect from django.contrib.auth.forms import UserCreationForm fr

我是Django的新手,我不知道这个错误。请帮忙。它给出了TypeError-save()得到了一个意外的关键字参数“force\u insert”。我测试了下面的代码,他们能够保存新的用户注册,但现在它不再保存了

下面是views.py的一部分,我认为它有一些问题:

    from django.shortcuts import render, redirect
    from django.contrib.auth.forms import UserCreationForm
    from django.contrib import messages
    from django.contrib.auth.decorators import login_required
    from . forms import UserRegisterForm, UserUpdateForm, ProfileUpdateForm

    def register(request):
        if request.method == 'POST':
            form = UserRegisterForm(request.POST)
            if form.is_valid():
            username = form.cleaned_data.get('username')
            form.save(force_insert=False)
            messages.success(request, f'Thank you {username}! Your account has been created!')
            return redirect('login')
    else:
        form = UserRegisterForm()

    return render(request, 'users/register.html', {'form':form})
还有模特

from django.db import models
from django.contrib.auth.models import User
from PIL import Image

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(default='profile_pics/default.jpg', upload_to='profile_pics')

    def __str__(self):
        return (self.user)

    def save(self):
        super().save()

        img = Image.open(self.image.path)

        if img.height > 300 or img.width > 300:
            output_size = (300,300)
            img.thumbnail(output_size)
            img.save(self.image.path)'

您已重写save方法,但尚未保留其签名。您需要接受与原始方法相同的参数,并在调用super时传入它们

def save(self, *args, **kwargs):
    super().save((*args, **kwargs)
    ...

在Django中重写模型的save方法时,还应将
*args
**kwargs
传递给重写的方法。此代码可以正常工作:

def save(self, *args, **kwargs):
    super(Profile, self).save(*args, **kwargs)

    img = Image.open(self.image.path)

    if img.height > 300 or img.width > 300:
        output_size = (300,300)
        img.thumbnail(output_size)
        img.save(self.image.path)'

我也有同样的问题

这将解决它:

在users/models.py文件中编辑super方法:

Python3版本 我在谷歌上查找这个错误,找到了这个主题。这段代码解决了我在Python 3中的问题:

def save(self,force_insert=False,force_update=False,using=None,update_fields=None):
super().save(强制插入、强制更新、使用、更新字段)
  • 使用
    django3.0
    python3.8
    进行测试

.

更改
form.save(force_insert=False)
for
form.save()
谢谢,这是有效的,但你能解释一下为什么有效吗?@juliarnasion-每个函数都有一个“签名”,一个参数模式。如果您使用不接受任何参数的新定义(隐式
self
除外)覆盖
save
,则在传递预期要处理的参数(例如
强制插入
)时,您会收到报告的错误。
*args,**kwargs
语法说,“收集
args
列表中的所有位置args和
kwargs
dict中的所有关键字args”。t他们可以通过
super
电话进行工作。非常感谢。这项工作很完美。在Corey ms Django博客项目中得到了这个。很好的解决方案。它工作得很好。
def save(self, *args, **kwargs):
    super.save(*args, **kwargs)