2014-02-25 3 views
0

'Контакт' является моделью, и 'ContactForm' является типовая формакак редактировать ModelForm в Джанго

urls.py

(r'^contact/edit/(?P<p_id>\d+)$',edit_contact_page), 

views.py

def edit_contact_page(request,p_id): 
    if request.method == 'POST': 
     form = ContactForm(request.POST,instance=obj) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/contact/success') 
    else: 
     obj=Contact.objects.get(pk=p_id) 
     form=ContactForm(instance=obj) 
     variables = RequestContext(request, {'form': form}) 
     return render_to_response('registration/edit_contact.html',variables) 


#edit_contact.html 
<form method="post" action="/contact/success/" class="form-signin"> 
    {% csrf_token %} 
    {{ form.name.errors }} 
    <label>Name</label> 
    {{ form.name }} 
    <br> 
    {{ form.email.errors }} 
    <label>Email</label> 
    {{ form.email }} 
    <br> 
    {{ form.msg.errors }} 
    <label>Message</label> 
    {{ form.msg }} 
    <br> 
    {{ form.phone.errors }} 
    <label>Phone</label> 
    {{ form.phone }} 
    <button class="btn btn-large btn-primary" type="submit">Save</button> 
</form> 

еще часть получить экземпляр (ограниченная форма), но метод post не сохраняет форму в модели и не дает ошибки проверки.

запрос перенаправляет шаблон sucess.html.

+0

Что такое 'obj' в' form = ContactForm (request.POST, instance = obj) '? –

+0

@BurhanKhalid - объект ограниченной формы .... форма содержит обновленные значения .. любой другой способ сделать это? – user2404093

+0

На самом деле ничего, его не объявили нигде в блоке. Я говорю о 'obj' не' form'. –

ответ

0

Удалить commit = False. Вы говорите django, чтобы не совершать свои изменения. Я не верю, что obj существует в вашем post-методе if statement. Он существует только в вашем заявлении else.

+0

удален commit = False даже не работает .. :( – user2404093

+0

Вы сделали .save(), и вы исправили свой тип, о котором указал Даниэль Роземан? – user2734679

0

Вам также нужно вернуть две последние строки на один уровень отступов, чтобы они выполнялись, когда форма размещена, но не действительна.

0

Ваша форма отправляет /contact/success (вот почему эта страница загружается), но новый контакт никогда не создается, потому что URL-адрес вашего метода просмотра /contact/edit/ не вызывается.

Вам необходимо исправить свой URL формы.

+0

, если плохое изменение url django не находит URL-адрес. , но он должен redirect success page .. – user2404093

+0

ur right ....

0
Contact instance should be placed at top 

indent last two lines of views.py 

def edit_contact_page(request,p_id): 

    obj=Contact.objects.get(pk=p_id) 
    if request.method == 'POST': 
     form = ContactForm(request.POST,instance=obj) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/contact/success') 
    else : 
     form=ContactForm(instance=obj) 
    variables = RequestContext(request, {'form': form, 'p_id': p_id}) 
    return render_to_response('registration/edit_contact.html',variables) 

form url 
<form method="post" action="/contact/edit/{{p_id}}" class="form-signin"> 
Смежные вопросы