django inlineformset_factory额外属性被忽略?

时间:2012-01-13 18:46:24

标签: python django inline-formset

我正在尝试渲染一个inlineformset,但似乎忽略了“extra”属性。考虑以下模型:

 class Foo_model(models.Model):     
     fooName = models.CharField(max_length=LIL_STRING)
     bars    = models.ForeignKey("Bar_model")

 class Bar_model(models.Model):     
     barName = models.CharField(max_length=LIL_STRING)

形式:

 class Foo_form(ModelForm):    
     class Meta:
         model = Foo_model

 class Bar_form(ModelForm):    
     class Meta:
         model = Bar_model

 Bar_formset = inlineformset_factory(Foo_model,Bar_model,formset=Bar_form,extra=23)

视图:

 def ViewFoo(request, model_id=False):
     if model_id:                  
         model = Foo_model.objects.get(pk=model_id)
     else:
         model = Foo_model()

     form = Foo_form(instance=model)    
     formset = Bar_formset(instance=model)

     return render_to_response('form.html', {'form' : form, 'formset' : formset }, context_instance=RequestContext(request))

和模板:

 <html>
   <form method="POST" action="">
     {% csrf_token %}
     <div>
       {{ form }}
       {{ formset }}
     </div>
     <input class="button" type="submit" value="Submit"/>
   </form>
 </html>  

这只显示一个Bar_form实例,当它应该显示23(“extra = 23”)时。我有什么想法吗?

由于


更新

事实证明,部分问题是我的所有模型类都继承自同一个基类。如果我让它们只是继承自models.Model,那么问题就会消失(尽管其他问题会让他们的头脑变得丑陋)。我仍然希望他们从一个类继承,所以我的原始问题仍然存在。


更新更新:

使我的模型的基类抽象:

 class BaseClass(models.Model):
     class Meta:
         abstract = True
似乎要做的伎俩。我现在可以在我的类之间使用ForeignKeys和ManyToManyFields。

1 个答案:

答案 0 :(得分:0)

由于外键存在于Foo模型中,因此您需要创建Foo FormSet(否则,从逻辑上讲,它对于表单的形式没有意义会包含)。