2009-09-13 61 views
0

遇到问题我正在尝试编写一个非常简单的django应用程序。我不能让它在我的模板中显示我的表单。django新手。用ModelForm

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

它显示完全没有。如果我添加一个提交按钮,它只会显示。

我是否必须声明一个继承自forms.Form的表单对象?不能用ModelForms来完成吗?

[更新]解决!

在我的网址(为浪费你的时间道歉)文件我有:

(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

我的不好:我在我的urls.py文件中使用了direct_to_template函数 谢谢大家! – 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