django forms - редактировать объект после первой отправки формы - PullRequest
0 голосов
/ 14 июля 2010

Я использую формы django для добавления новых объектов в БД. Код, который у меня сейчас есть:

if request.method == 'POST':
    form = MyForm(data=request.POST)

    if form.is_valid():
        obj = form.save()
 else:
    form = MyForm()

return render_to_response('reflections/add_reflection.html', {'form':form},context_instance=RequestContext(request))

Код выше в настоящее время добавляет новый объект каждый раз при отправке формы. Я хочу, чтобы объект редактировался при следующем нажатии кнопки сохранения, а не при добавлении новой записи.

Как бы я это сделал?

Ответы [ 2 ]

5 голосов
/ 14 июля 2010

Использование

 instance_id = None
 if request.method == 'POST':
    try:
        instance = MyType.objects.get(id=request.POST.get('instance_id'))
    except MyType.DoesNotExist:
        instance = None
    form = MyForm(data=request.POST, instance=instance)

    if form.is_valid():
        obj = form.save()
        instance_id = obj.id
 else:
    form = MyForm(instance=None)

return render_to_response('reflections/add_reflection.html', {'form':form, 'instance_id': instance_id or ''},context_instance=RequestContext(request))

Как только объект сохранен, передайте его идентификатор в контексте на страницу и добавьте его в скрытое поле ввода внутри формы как name = 'instance_id'.

Счастливое кодирование.

0 голосов
/ 14 июля 2010

Вам либо нужно добавить отдельное представление для редактирования существующего объекта, либо - лучше - добавить функциональность в это представление. Чтобы сделать последнее, вы можете передать экземпляр объекта, который вы хотите отредактировать с помощью вашей модели, в другую часть вашего предложения:

else:
   if existing_obj:
       form = MyForm(instance=existing_obj) #this is editing your 'existing_obj'
   else:
       form = MyForm() # this is creating a brand new, empty form

Вам также потребуется обновить бит кода POST-обработки. Смотрите пример здесь

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