2012-07-18 91 views
1

我有一个管理员表单允许和最终用户添加测验,并且测验有答案。当您编辑测验时,测验答案部分有4行测验答案。前3个编号为0,1,2,第四个编号为__prefix__Django Inline Admin Formset额外条目有前缀而不是数字

例子:

<input name="quizanswer_set-0-text" value="one" class="vTextField" maxlength="255" type="text" id="id_quizanswer_set-0-text" /> 

<input id="id_quizanswer_set-__prefix__-text" type="text" class="vTextField" name="quizanswer_set-__prefix__-text" maxlength="255" /> 

当表单处理,它会跳过第四输入,因为,我假设,前缀是不是它正在寻找。

模板代码:

{% for inline_admin_form in inline_admin_formset %} 
{{ inline_admin_form.pk_field.field }} {{ inline_admin_form.fk_field.field }} 

形式:

class QuizAnswerInlineFormSet(forms.models.BaseInlineFormSet): 
    def is_valid(self): 
     # make sure errors are populated 
     _ = self.errors 

     return super(QuizAnswerInlineFormSet, self).is_valid()    

    def clean(self): 
     super(QuizAnswerInlineFormSet, self).clean() 

     answer_count = 0 
     correct_count = 0 

     for form in self.forms: 
      if not hasattr(form, 'cleaned_data'): 
       continue 
      if not form.cleaned_data: 
       continue 
      if not form.is_valid(): 
       continue 
      if form.cleaned_data[forms.formsets.DELETION_FIELD_NAME]: 
       continue 

      answer_count += 1 

      if form.cleaned_data.get("is_correct", False): 
       correct_count += 1 

     if answer_count < 2: 
      raise ValidationError("Questions must have at least 2 answers") 

     if correct_count != 1: 
      raise ValidationError("There must be exactly one correct answer") 

没有人有为什么会被打印__PREFIX__,而不是数量的想法?有什么我需要为此设置?我本来没有制作表格,我只是想解决这个问题,而且我不太熟悉这种形式。

回答

1

我有同样的问题。事实证明,行不应该显示。当添加新行并替换前缀时,它被javascript用作模板。

我发现我没有正确捡起forms.css,所以找不到empty-form类的定义,它有display: none