1
我設置我的班如下:Django的內聯表單集設置
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})
有人能證實這想法會工作或者是什麼,我需要做的有我想要的功能?目前,我得到這個錯誤:
[u'ManagementForm data is missing or has been tampered with']
更新1 我已經成功通過以下鏈接from readthedocs
但是要解決上述錯誤,現在目前,似乎該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>
什麼可現在的問題?
上面的鏈接真的沒有指出第一個錯誤的問題。此[鏈接](http://readthedocs.org/docs/django/en/latest/releases/1.3.html#formset-updates)雖然 –
謝謝。我已經更新了我的答案。 – akonsu
我認爲formset的想法並不適合我...在您看來,代碼是否正確?即使在建議的更改之後,表單仍然是空白的。如果您知道存在formset方法的替代方案,那也會很棒 –