Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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 保存按钮不使用属性错误:';WSGIRequest&x27;对象没有属性';项目';_Python_Django_Button_Save - Fatal编程技术网

Python 保存按钮不使用属性错误:';WSGIRequest&x27;对象没有属性';项目';

Python 保存按钮不使用属性错误:';WSGIRequest&x27;对象没有属性';项目';,python,django,button,save,Python,Django,Button,Save,我检查了这里的其他帖子,它们的属性错误与我的相同,但它们似乎是出于不同的原因。我目前正在从表单中请求信息,以便用户更新项目页面。然后,如果表单有效,我将保存表单,保存项目,然后尝试返回重定向到项目页面;但是,当我单击按钮时,计算机会呈现错误页面。我将附加forms.py、views.py、models.py和url.py: 更新部分的Views.py: @wraps(function) def wrap(request, *args, **kwargs): user =

我检查了这里的其他帖子,它们的属性错误与我的相同,但它们似乎是出于不同的原因。我目前正在从表单中请求信息,以便用户更新项目页面。然后,如果表单有效,我将保存表单,保存项目,然后尝试返回重定向到项目页面;但是,当我单击按钮时,计算机会呈现错误页面。我将附加forms.py、views.py、models.py和url.py:

更新部分的Views.py:

  @wraps(function)
  def wrap(request, *args, **kwargs):
        user = request.user
        name = kwargs.get('name')  
        if uProjects.objects.filter(project=Project.objects.get(name=name), user=user, ifAdmin=True).exists():
             return function(request, *args, **kwargs)
        else:
            return HttpResponseRedirect('/')
  return wrap

@admin_check
def update(request, name):
    project = Project.objects.get(name = name)
    if request.method == "POST":
        pr_form = ProjectUpdateForm(request.POST,
                                    request.FILES,
                                    instance=project)
    #if is_admin in Member == True: #need to authenticate user, access user permissions, if user has permission:
        if pr_form.is_valid():
            pr_form.save()
            messages.success(request, f'This project has been updated.')
           
            request.project.save()
            return redirect('project')
        
    else:
        pr_form = ProjectUpdateForm(instance=project)
    context = {
        'pr_form': pr_form
    }
    return render(request, 'projects/updateproject.html', context)
ProjectUpdateForm的forms.py:

class ProjectUpdateForm(forms.ModelForm):
    class Meta:
        model = Project
        fields=['name', 'department', 'department','bPic', 'logo',
        'department', 'purpose', 'projectTag', 'lookingFor', 'recruiting']
url.py

from projects import views as p

path('project/<str:name>/', p.project, name='project'),
path('editproject/<str:name>/', p.update, name="editproject"),

从项目导入视图作为p
路径('project/',p.project,name='project'),
路径('editproject/',p.update,name=“editproject”),

谢谢,请让我知道我能做什么。

您的错误在
request.project.save()行,request没有项目属性

实际上,您不需要为project调用
save()
方法

因为
ProjectUpdateForm
ModelForm
和()方法将创建指定模型的新实例或更新分配的实例


@admin_check
def update(request, name):
    project = Project.objects.get(name = name)
    if request.method == "POST":
        pr_form = ProjectUpdateForm(request.POST,
                                    request.FILES,
                                    instance=project)
    #if is_admin in Member == True: #need to authenticate user, access user permissions, if user has permission:
        if pr_form.is_valid():
            # save() returns an instance object, you can use it to manipulate your object.
            instance = pr_form.save() 
            messages.success(request, f'This project has been updated.')
            # YOUR ERROR IS ⬇️ HERE request doesn't have project attribute
            # request.project.save()
            # redirect with arguments
            return redirect('project', name=instance.name)
    ...
此外,重定向必须包含参数
name
,因为项目url需要name属性:

redirect('project', name=instance.name)

当我删除request.project.save()时,我会在/editproject/save world/Reverse处为“project”获取
NoReverseMatch,但找不到任何参数。尝试了1个模式:['project/(?P[^/]+)/$']
这就是我尝试请求项目并保存它的原因。我该如何解决这个问题?@AndrewBregman,我编辑了我的答案,你必须提供参数
name
redirect('project',name=instance.name)