1

ビュー.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オブジェクトによってフィルタリングされた値は、チェックボックスとともに値を表示する必要があります.typesオブジェクトの場合、問題ではありません.djangoでそれを行う方法はあります.

4

2 に答える 2

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
    })

幸運を!

于 2013-05-29T15:58:11.513 に答える
0

models.BooleanField()このようにしようとしている理由について何も知らずに、Django が自動的にチェックボックスとして表示する を使用するだけで、動的にしようとして問題を複雑にしすぎているように見えます。よりシンプルになり、コードも読みやすくなります。

于 2013-05-28T12:16:42.343 に答える