2011-10-04 2 views
1

나는 다음과 같이 설정 내 수업을했습니다 :장고 인라인의 formset 설정

class InspectionGroup(models.Model): 
    group = models.CharField(max_length=50) 

class InspectionItem(models.Model): 
    group = models.ForeignKey(InspectionGroup) 
    item = models.CharField(max_length=50) 

class InspectionQuestion(models.Model): 
    item = models.ForeignKey(InspectionItem) 
    question = models.CharField(max_length=200) 
    question_pass = models.BooleanField() 

class InspectionResult(models.Model): 
    question = models.ForeignKey(InspectionQuestion) 
    vehicle = models.ForeignKey(Vehicle) 
    result = models.BooleanField() 
    submitted_by = models.ForeignKey(User, editable=False) 
    date_time_submitted = models.DateTimeField(default=datetime.today, 
          editable=False) 

내가하고 싶은 것은 그들이되게됩니다 해당 그룹에서 다음, 사용자가 검사 그룹을 선택하는 것입니다 모든 해당 그룹의 질문을 템플릿의 그룹화에 사용되는 항목 헤더와 함께 표시합니다. 그런 다음 질문에 답변하고 결과를 게시합니다.

제 문제는 이것을 해결하는 것입니다. 몇 가지 코드로 시작 했었지만 제대로 된 것 같지 않습니다.

forms.py 
QuestionFormSet = inlineformset_factory(InspectionItem, InspectionQuestion, 
      form=QuestionForm, extra=0, can_delete=False) 
class BaseInspectionFormset(BaseInlineFormSet): 
    def add_fields(self, form, index): 
     # allow the super class to create the fields as usual 
     super(BaseInspectionFormset, self).add_fields(form, index) 

     # created the nested formset 
     try: 
      instance = self.get_queryset()[index] 
      pk_value = instance.pk 
     except IndexError: 
      instance=None 
     pk_value = hash(form.prefix) 

     # store the formset in the .nested property 
     form.nested = [QuestionFormSet (instance = instance, 
         prefix = 'INSPECTIONQUESTIONS_%s' % pk_value)] 
InspectionFormset = inlineformset_factory(InspectionGroup, InspectionItem, 
      formset=BaseInspectionFormset, extra=0, can_delete=False) 


view.py 
def vehicle_inspection(request, stock_number, id): 
vehicle = get_object_or_404(Vehicle, stock_number=stock_number) 
group = get_object_or_404(InspectionGroup, pk=id) 

if request.method == 'POST': 
    formset = InspectionFormset(request.POST, instance=group) 

    if formset.is_valid(): 
     results = formset.save_all() 

     return HttpResponseRedirect(reverse('inspectionRecord', 
        kwargs={'stock_number': stock_number})) 
else: 
    formset = InspectionFormset(instance=group) 


return render_to_response('vehicles-inspection-form.html', { 
     'formset': formset}) 

이 아이디어가 효과가 있거나 내가 원하는 기능을 갖추려면 누군가해야하는지 확인할 수 있습니까? 현재 내가이 오류 받고 있어요 : 나는 그러나이 링크 from readthedocs

에 따라 위의 오류를 해결하기 위해 관리했습니다 1

[u'ManagementForm data is missing or has been tampered with'] 

업데이트를 지금 현재, 해당 formset 이후 비어 보인다 템플릿에는 제출 버튼 만 표시됩니다.

<form action="." method="POST" id="inspection_form"> 
    {% csrf_token %} 
    <div id="form"> 
     {{ formset.management_form }} 
     {% for form in formset.forms %} 
      {{ form }} 
      {% if form.nested %} 
       {% for formset in form.nested %} 
        {{ formset.as_table }} 
       {% endfor %} 
      {% endif %} 
     {% endfor %} 
    </div> 
    <div class="form_buttons"> 
     <button type="submit" name="confirm" id="confirm"> 
      <span>Submit</span> 
     </button> 
    </div> 
</form> 

지금 어떤 문제가있을 수 있습니까? https://docs.djangoproject.com/en/dev/topics/forms/formsets/#understanding-the-managementform

편집 : for form in formset 대신 formset.forms

답변

1

문서는 답을 갖고있는 것 같아요?

{{ form.as_table }} 대신 {{ form }}입니다.

+0

위의 링크는 처음 오류가 발생했을 때 실제로 문제를 지적하지 않았습니다. 이 [link] (http://readthedocs.org/docs/django/en/latest/releases/1.3.html#formset-updates)는 –

+0

에게 감사했지만. 나는 나의 대답을 업데이트했다. – akonsu

+0

formset 아이디어가 나를 위해 밖으로 작동하지 않는 것 같아요 ... 귀하의 의견에 올바른 코드가 무엇입니까? 제안 된 변경 사항이 있더라도 양식은 여전히 ​​비어 있습니다. formset 메소드에 대한 대안이 있다는 것을 알고 있다면, 그것은 또한 –