1

views.py構建複選框

def what(request): 
     user = request.user 
     report = Report.objects.get(user=user.id) 
     reportnotesform=ReportNotes(instance=report) 
     reportform = ReportForm(instance=report) 
     typeList = Types.objects.filter(user=user, is_active=True,parent_type_id=None) 
     list = [] 
     for type in typeList: 
      if not type.parent_type_id: 
       list.append(type) 
       subtype = Types.objects.filter(parent_type_id=type.id, is_active=True) 
       for subtypes in subtype: 
         list.append(subtypes) 
     if request.method == 'POST': 
      ReportType.objects.filter(report=report).delete() 
      checked_ones = [unicode(x) for x in subtype if unicode(x) in request.POST.keys()] 
      reportnotesform=ReportNotes(request.POST,instance=report) 
      if reportnotesform.is_valid(): 
       report=reportnotesform.save(commit=False)  
       report.user=request.user 
       report.save() 
       for entry in checked_ones: 
         r = ReportType() 
         r.report = report 
         r.title = entry 
         r.save() 
      return redirect('/member/where/') 
     checked_ones = [x.title for x in ReportType.objects.filter(report=report)] 
     return render(request, 'incident/what.html', 
     { 
     'newreport_menu': True, 
     'typeList':list, 

     'checked_ones':checked_ones, 
    # 'typelist': typelist, 
     'ReportNotes':reportnotesform, 
     'ReportForm':reportform 
     }) 

models.py

class ReportType(models.Model): 
    report = models.ForeignKey(Report) 
    title = models.CharField('Incident Type', max_length=200) 

模板

{% for type in typeList%} 
    {% if type.parent_type_id == None %} 
    <h1>{{type.title}}</h1> 
{% else %} 
<p><input type="checkbox">{{type.title}}</input></p> 
{% endif %} 
{% endfor %} 

我使用模型的形式來顯示覆選框,動態。

這是我的觀點,我從數據庫中獲取值並顯示。由typelist對象過濾的值需要顯示值以及複選框。對於類型對象,無所謂。 Django的。

回答

1

這應該爲你工作:

<h1> {% for type in types %}{{type.title}}<br />{% endfor %}</h1>   
<form action="" method="post"> 
{% for field in typelist %} 
{% if field.title in checked_ones %} 
<label><input type="checkbox" checked="true" name="{{field}}">{{ field }}</label><br /> 
{% else %} 
<label><input type="checkbox" name="{{field}}">{{ field }}</label><br /> 
{%endif%} 
{% endfor %} 
</form> 


def what(request): 
    user = request.user 

    types = Types.objects.filter(user=user.id, parent_type_id=None).order_by('title') 
    typelist=Types.objects.filter(user=user.id,parent_type_id__isnull=False).order_by('title') 
    reporttypeForm = ReportTypeForm() 
    if request.method == 'POST': 
     ReportType.objects.filter(report=#your report).delete() 
     checked_ones = [unicode(x) for x in typelists if unicode(x) in request.POST.keys()] 
     for entry in checked_ones: 
      r = ReportType() 
      r.report = # the hardcoded report 
      r.title = entry 
      r.save() 
     ... 
     reporttypeForm = ReportTypeForm(request.POST)   
     if reporttypeForm.is_valid(): 
      reporttypeForm.save() 
    checked_ones = [x.title for x in ReportType.objects.filter(report=#your report)] 
    return render(request, 'incident/what.html', 
     { 
      'checked_ones':checked_ones, 
      'newreport_menu': True, 
      'types':types, 
      'typelist': typelist, 
      'reporttypeForm':ReportTypeForm 
    }) 

祝你好運!

0

不知道爲什麼你要這樣做,它看起來像你試圖使它動態過度複雜化,當你可以使用一個models.BooleanField(),Django將自動顯示爲一個複選框。它會更簡單,並使代碼更易於閱讀。

+1

聽起來像您可能想要爲該值添加一個字段到模型中,並將該字段定義爲'models.BooleanField(blank = True,null = True)'。這樣,您可以在以後使用時將其保留爲空。 – Zamphatta