2 回答
TA贡献1880条经验 获得超4个赞
问题出在:
productUpdate_form = ProductForm(instance=request.product1)
不request包含product1属性,您只需传递product1对象即可:
from django.shortcuts import render, get_object_or_404, redirect
from django.http import HttpResponseRedirect, HttpResponse
from django.contrib import messages
from django.views.generic import (
UpdateView,
DeleteView
)
from product.models import Product
from pages.forms import ProductForm
def ProductUpdateView(request, pk):
product1 = get_object_or_404(Product, pk=pk)
if request.method == 'POST':
productUpdate_form = ProductForm(data=request.POST,files=request.FILES,instance=product1))
# Check to see the form is valid
if productUpdate_form.is_valid(): # and profile_default.is_valid() :
# Sava o produto
productUpdate_form.save()
# Registration Successful! messages.success
messages.success(request, 'Produto Modificado com Sucesso')
#Go to Index
return redirect('index')
else:
# One of the forms was invalid if this else gets called.
print(productUpdate_form.errors)
else:
# render the forms with data.
productUpdate_form = ProductForm(instance=product1)
context = {'productUpdate_form': productUpdate_form,}
return render(request, 'base/update.html',context)
然而,这不是一个UpdateView:这不是一个基于类的视图,并且它不是从UpdateView.
注意:函数通常用Snake_case编写,而不是PerlCase,因此建议将函数重命名为product_update_view, not ProductUpdateView。
TA贡献1829条经验 获得超7个赞
最好使用 ClassView
# views.py
from django.views.generic.edit import UpdateView
from product.models import Product
from django.contrib import messages
from pages.forms import ProductForm
class ProductUpdateView(UpdateView):
model = Product
form_class = ProductForm
template_name = 'base/update.html'
def form_valid(self, form):
self.object = form.save()
messages.success(self.request, 'Produto Modificado com Sucesso')
return redirect('index')
def get_context_data(self, **kwargs):
if 'productUpdate_form' not in kwargs:
kwargs['productUpdate_form'] = self.get_form()
return super().get_context_data(**kwargs)
# urls.py
from django.urls import include, path
from pages.views import (ProductListView,
ProductUpdateView,
ProductDeleteView)
urlpatterns = [
path('listProduct/', ProductListView, name='listProduct'),
path('<int:pk>/update/', ProductUpdateView.as_view(), name='product-update'),
]
添加回答
举报