2009-09-13 2 views
0

Я пытаюсь написать очень простое приложение django. Я не могу заставить его показать свою форму внутри моего шаблона.django новичок. Проблемы с ModelForm

<form ...> 
{{form.as_p}} 
</form> 

Это абсолютно ничего не показывает. Если я добавлю кнопку отправки, она только покажет это.

Должен ли я объявлять объект формы, который наследует формы. Форм? Не могу ли это сделать с помощью ModelForms?

[ДОПОЛНЕНО] Решено! (Прошу прощения за тратить свое время)

В моих URLs файл я имел:

(r'login/$',direct_to_template, {'template':'register.html'} 

Перешел:

(r'login/$','portal.views.register') 

И да, я чувствую себя ужасно.

фона:

У меня есть модель для студентов, и у меня есть страница регистрации. Когда к нему обращаются, он должен отображать текстовое поле, запрашивающее имя ученика. Если студент завершает это поле, он сохраняет его.

#models.py 

class Student(models.Model): 
    name = models.CharField(max_length =50) 

#forms.py 
class StudentForm (forms.ModelForm): 
    class Meta: 
     model = Student 

Итак, вот мое мнение:

def register(request):                                 
      if request.method == 'POST': 
        form = StudentForm(request.POST) 
        if form.is_valid(): 
          form.save() 
          return render_to_response('/thanks/') 
      else: 

        student = Student() 
        form = StudentForm(instance =student) 

      return render_to_response('register.html',{'form':form}) 
+0

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

+0

My bad: Я использовал функцию direct_to_template в моем файле urls.py Спасибо всем! – Tom

ответ

2

Проблема заключается в том, на ваш взгляд. У вас не будет существующего студенческого объекта для извлечения из базы данных. Следующий пример кода поможет вам реализовать представление «создать».

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

def add_student(request): 
    if request.method == 'POST': 
     form = StudentForm(request.POST) 
     if form.is_valid(): 
     new_student = form.save() 

     return HttpResponseRedirect('/back/to/somewhere/on/success/') 
    else: 
     form = StudentForm() 

    return direct_to_template(request, 
           'register.html', 
           {'form':form}) 
+0

спасибо, но форма до сих пор не отображается при первом обращении к URL-адресу. Однако посмотрим на ваши советы. – Tom

+0

Прошу прощения, вы абсолютно правы. – Tom