2015-07-20 66 views
0

我的Django学习已将我带入Forms。我已经能够创建一个简单的表单,使用我正在阅读的书中的信息。我还创建了一个基于我创建的模型的表单。我遇到的问题是我试图在模板中创建自己的格式,并且出于某种原因标签信息不在表单集中。我对如何使用默认显示方式(即{{form}})具有此信息有点困惑。Django丢失标签fromset

我有什么;

adminforms.py

class NewsForm(ModelForm): 
    class Meta: 
     model = News_Article 
     exclude = ('news_datetime_submitted', 'news_yearmonth',) 
     labels = { 
      'news_title': _('Enter News Title'), 
     } 
     help_texts = { 
      'news_title': _('Enter a title to give a short description of what the news is.'), 
     } 
     error_messages = { 
      'news_title': { 
       'max_length': _("News title is too long."), 
      }, 
     } 

view.py

def create(request, dataset): 
    if dataset not in ['news', 'announcement']: 
     # change this to the siteadmin page if authenticated and have permissions, otherwise go to home 
     return HttpResponseRedirect(reverse('pages')) 
    rDict = {} 
    # if this is a POST request we need to process the form data 
    if request.method == 'POST': 
     # create a form instance and populate it with data from the request: 
     if dataset == "news": 
      form = NewsForm(request.POST) 
     elif dataset == "announcement": 
      form = AnnouncementForm(request.POST) 
     # check whether it's valid: 
     if form.is_valid(): 
      # process the data in form.cleaned_data as required 
      # ... 
      # redirect to a new URL: 
      return HttpResponseRedirect('/home/') 
     else: 
      pass 

    # if a GET (or any other method) we'll create a blank form 
    else: 
     announcement = get_announcement() 
     if not announcement == None: 
      rDict['announcement'] = announcement 
     if dataset == "news": 
      rDict['formset'] = NewsForm() 
      rDict['branding'] = {'heading': 'Create News Item', 'breadcrumb': 'Create News', 'dataset': 'create/' + dataset + '/'} 
     elif dataset == "announcement": 
      rDict['form'] = AnnouncementForm() 
      rDict['branding'] = {'heading': 'Create Announcement', 'breadcrumb': 'Create Announcement', 'dataset': 'create/' + dataset + '/'} 
     rDict['sitenav'] = clean_url(request.path, ['"', "'"]) 
     rDict['menu'] = Menu.objects.all().order_by('menu_position') 
     pdb.set_trace() 
     return render(request, 'en/public/admin/admin_create.html', rDict) 

模板

<form action="/siteadmin/{{ branding.dataset }}" method="post"> 
    {% csrf_token %} 
    {{ formset.management_form }} 
    {% for form in formset %} 
     {% for field in form %} 
      {{ field.label_tag }} {{ field }} 
     {% endfor %} 
    {% endfor %} 
    <input type="submit" value="Submit" /> 
</form> 

出于某种原因,突出部分获取表单域和无标签的信息。注:模板文本我从Django文档中获取了关于formset的信息。

我查看过返回的数据,但没有标签信息,但它仅适用于{{form}}?有点困惑。

(Pdb) rDict['formset'] 
<NewsForm bound=False, valid=Unknown, fields=(news_title;news_text;news_active)> 

在此先感谢你们。

韦恩

回答

2

你添加一个名为“表单集”上下文变量,它是不是一个formset,这是一个形式:rDict['formset'] = NewsForm()

所以,当这个上下文变量传递给模板时,迭代{% for form in formset %}会产生一个误导效果,即创建一个名为form的变量,它实际上是一个表单字段。尝试正确地命名事物(如果您确实需要一个表单,请按照here所述创建一个表单),然后查看事情是否有意义。

+0

谢谢@ david-g。在试图解决如何在我的模板中手动创建表单时,我会感到困惑。我没有在formset之后,也没有意识到如何访问表单的每个元素。你的意见使我得以解决这个问题,所以谢谢你。我仍然在通过我的书籍慢慢读完东西(更重要的是那些花时间在这里回复我的人的出色反应)。真的没有任何理解Django的亲密朋友能够指导我,所以这个资源是非常宝贵的。再次感谢 :) – Smurf