2015-07-20 73 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