Django编辑表单数据:数据重复而不是更新

时间:2010-11-12 05:22:12

标签: django forms django-views

如何更新现有记录,而不是添加一个新问题。现在我正在尝试编辑编辑表单中的现有产品数据并保存新的更改。但是我没有更新现有的产品数据,而是获得了一个新产品,所以一切都在重复。创建新产品而不是更新现有数据。我该怎么做才能解决这个问题?

这是我的代码:

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

2 个答案:

答案 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)

您还没有检索到您尝试更新的原始对象。你需要先做到这一点!