Django 无法保存表单数据
Django can't save form data
我正在做一个 django 项目,遇到了一个奇怪的问题。
我为此使用 model form
。
尽管我写了 form.save()
如下所示,但新数据并未保存。
# in views.py
class ProductUpdateView(self, request, product_id):
def get(self, request, product_id):
product = get_object_or_404(Product, id=product_id)
name = product.name
id = product.id
form = ProductEditForm(instance=product)
context = {
"form": form,
"name": name,
"id": id,
}
return render(request, "management/product_detail.html", context)
def post(self, request, product_id):
form = ProductEditForm(request.POST, instance=request.user)
product = get_object_or_404(Product, id=product_id)
if form.is_valid():
form.save()
messages.success(request, f"'{product.name}' is successfully updated!")
return redirect("products_list")
else:
messages.warning(request, "form is invalid")
return redirect("products_list")
# in forms.py
class ProductEditForm(forms.ModelForm):
class Meta:
model = Product
fields = ["name", "description", "price", "is_available", "category"]
def __init__(self, *args, **kwargs):
super(ProductEditForm, self).__init__(*args, **kwargs)
for field in self.fields:
self.fields[field].widget.attrs["class"] = "form-control"
先生,你能试试这个并给我反馈吗,我不太确定
这只是更改产品名称其他功能可能不起作用
form = ProductEditForm(request.POST )
product = get_object_or_404(Product, id=product_id)
if form.is_valid():
product.name = request.POST['name']
product.save()
messages.success(request, f"'{product.name}' is successfully updated!")
return redirect("products_list")
instance=request.user 先生,我把它给你删除了,然后再添加回来,我不知道它的用途
欢迎先生
我终于解决了这个问题!
# views.py
def post(self, request, product_id):
form = ProductEditForm(request.POST, instance=request.user)
product = get_object_or_404(Product, id=product_id)
if form.is_valid():
# get category instance
category = Category.objects.get(id=int(request.POST["category"]))
# is_available
if request.POST["is_available"] == "on":
is_available = True
else:
is_available = False
product.name = request.POST["name"]
product.description = request.POST["description"]
product.price = request.POST["price"]
product.is_available = is_available
product.category = category
product.save()
messages.success(request, f"'{product.name}' is successfully updated!")
return redirect("products_list")
else:
messages.warning(request, "form is invalid")
return redirect("products_list")
我正在做一个 django 项目,遇到了一个奇怪的问题。
我为此使用 model form
。
尽管我写了 form.save()
如下所示,但新数据并未保存。
# in views.py
class ProductUpdateView(self, request, product_id):
def get(self, request, product_id):
product = get_object_or_404(Product, id=product_id)
name = product.name
id = product.id
form = ProductEditForm(instance=product)
context = {
"form": form,
"name": name,
"id": id,
}
return render(request, "management/product_detail.html", context)
def post(self, request, product_id):
form = ProductEditForm(request.POST, instance=request.user)
product = get_object_or_404(Product, id=product_id)
if form.is_valid():
form.save()
messages.success(request, f"'{product.name}' is successfully updated!")
return redirect("products_list")
else:
messages.warning(request, "form is invalid")
return redirect("products_list")
# in forms.py
class ProductEditForm(forms.ModelForm):
class Meta:
model = Product
fields = ["name", "description", "price", "is_available", "category"]
def __init__(self, *args, **kwargs):
super(ProductEditForm, self).__init__(*args, **kwargs)
for field in self.fields:
self.fields[field].widget.attrs["class"] = "form-control"
先生,你能试试这个并给我反馈吗,我不太确定 这只是更改产品名称其他功能可能不起作用
form = ProductEditForm(request.POST )
product = get_object_or_404(Product, id=product_id)
if form.is_valid():
product.name = request.POST['name']
product.save()
messages.success(request, f"'{product.name}' is successfully updated!")
return redirect("products_list")
instance=request.user 先生,我把它给你删除了,然后再添加回来,我不知道它的用途
欢迎先生
我终于解决了这个问题!
# views.py
def post(self, request, product_id):
form = ProductEditForm(request.POST, instance=request.user)
product = get_object_or_404(Product, id=product_id)
if form.is_valid():
# get category instance
category = Category.objects.get(id=int(request.POST["category"]))
# is_available
if request.POST["is_available"] == "on":
is_available = True
else:
is_available = False
product.name = request.POST["name"]
product.description = request.POST["description"]
product.price = request.POST["price"]
product.is_available = is_available
product.category = category
product.save()
messages.success(request, f"'{product.name}' is successfully updated!")
return redirect("products_list")
else:
messages.warning(request, "form is invalid")
return redirect("products_list")