2015-09-29 3 views
1

Я новичок в Django. Я пытаюсь создать форму на 'example.com/contacts/10/edit', которая позволяет редактировать детали контакта, а затем привести вас на страницу подробных данных этого контакта (example.com/contacts/10) , 10 в этих случаях является значением pk по умолчанию.Как создать шаблон модели в шаблоне django

Мне удалось отобразить форму, которая редактирует контакт в базе данных, но форма пуста в шаблоне, и я не могу понять, как заполнить форму данными из базы данных.

ModelForm Я использую - AddForm() - это то же самое, что я использую, чтобы добавить новый контакт

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

views.py

def EditContact(request, pk): 
    instance = get_object_or_404(Contact, id=pk) 
    if request.POST: 
     form = AddForm(request.POST or None, instance=instance) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/contacts/') 

    else: 
     form = AddForm() 

    return render(request, 'contacts/edit.html', {'form': form}) 

форма в шаблоне:

<form action="" method="POST"> {% csrf_token %} 
    <table> 

      <p> {{ form.as_ul }}</p> 

    </table> 

    <input type="submit" value="Post"> 
</form> 

Кроме того, я недавно прочитал о общих взглядах редактирования, может быть, кто-то может сказать мне, если они будут более подходящими для того, что я пытаясь достичь - то есть добавлять, редактировать и удалять контакты из базы данных. Благодарю.

ответ

3

Вы уже делаете это в блоке request.POST.

Вы должны отправить в instance аргумент в блоке еще слишком

def EditContact(request, pk): 
    instance = get_object_or_404(Contact, id=pk) 
    if request.method == 'POST': #It is better to explicitly check for method instead of the dictionary 
     form = AddForm(request.POST, instance=instance) #No need of the 

"или None" здесь если form.is_valid(): form.save() возвращение HttpResponseRedirect ('/ контакты/')
еще: форма = AddForm (экземпляр = экземпляр) #Here является изменение

return render(request, 'contacts/edit.html', {'form': form}) 
+1

И вы должны упасть 'или Non e': вы находитесь в request.POST, нет никакой возможности, что это None. –

+0

правый .. редактирование .. спасибо @DanielRoseman – karthikr

Смежные вопросы