簡體   English   中英

保存按鈕不適用於屬性錯誤:“WSGIRequest”object 沒有屬性“項目”

[英]Save Button Not Working with Attribute Error: 'WSGIRequest' object has no attribute 'project'

我檢查了這里的其他帖子,這些帖子有我所擁有的屬性錯誤,但它們似乎是出於不同的原因。 我目前正在從表單中請求用戶更新項目頁面的信息。 然后,如果表單有效,我將保存表單,保存項目,然后嘗試將重定向返回到項目頁面; 但是,當我單擊按鈕時,計算機會呈現錯誤頁面。 我將附上我的 forms.py、views.py、models.py 和 urls.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)

forms.py 用於 ProjectUpdateForm:

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

網址.py

from projects import views as p

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

謝謝,請讓我知道我能做什么。

您的錯誤在request.project.save()行中,請求沒有項目屬性。

實際上你不需要為項目調用save()方法。

因為ProjectUpdateFormModelFormModelForm.save() ( Django docs ) 方法將創建指定 model 的新實例或更新分配的實例。


@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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM