Данные формы Django Edit: данные дублируются, а не обновляются - PullRequest
3 голосов
/ 12 ноября 2010

Как я могу обновить существующую запись, а не добавить новую, которая является моей проблемой.Прямо сейчас я пытаюсь отредактировать существующие данные о продукте в форме редактирования и сохранить новые изменения.Но вместо того, чтобы обновлять существующие данные о продукте, я получаю новый продукт, поэтому все дублируется.Новый продукт создается вместо того, чтобы обновлять существующие данные.Что я могу сделать, чтобы решить эту проблему?

Вот мой код:

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

9 голосов
/ 12 ноября 2010

Чтобы обновить существующий объект, вы должны предоставить этот объект как instance kwarg для вашей формы. От документы :

>>> 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)
0 голосов
/ 12 ноября 2010

Вы никогда не получали исходный объект, который пытаетесь обновить. Вы должны сделать это первым!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...