如何更新现有记录,而不是添加一个新问题。现在我正在尝试编辑编辑表单中的现有产品数据并保存新的更改。但是我没有更新现有的产品数据,而是获得了一个新产品,所以一切都在重复。创建新产品而不是更新现有数据。我该怎么做才能解决这个问题?
这是我的代码:
@login_required
def edit(request, id=None):
if request.method == 'POST':
form = ProductForm(request.POST)
if form.is_valid():
product = form.save( commit=False )
product.save()
return HttpResponseRedirect( '/details/%s/' % ( product.id ) )
Eternicode,谢谢你的答案很好,代码现在工作正常,数据不重复,因为我在编辑日期后保存表单。根据你的回复,这是有效的:
@login_required
def edit(request, id=None):
if request.method == 'POST':
product = Product.objects.get(id__exact=id)
form = ProductForm(request.POST, instance=product)
print "PRODUCT POST"
if form.is_valid():
print "Display Form"
product = form.save( commit=False )
product.save()
return HttpResponseRedirect( '/details/%s/' % ( product.id ) )
答案 0 :(得分:9)
为了更新现有对象,您必须将该对象作为instance
kwarg提供给您的表单。来自the docs:
>>> from django.forms import ModelForm
# Create the form class.
>>> class ArticleForm(ModelForm):
... class Meta:
... model = Article
# Creating a form to add an article.
>>> form = ArticleForm()
# Creating a form to change an existing article.
>>> article = Article.objects.get(pk=1)
>>> form = ArticleForm(instance=article)
答案 1 :(得分:0)
您还没有检索到您尝试更新的原始对象。你需要先做到这一点!