django inlineformset_factory的extra属性被忽略?

1 投票
1 回答
1288 浏览
提问于 2025-04-17 10:11

我正在尝试渲染一个内联表单集,但“额外”这个属性似乎没有起作用。看看以下这些模型:

 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

似乎解决了这个问题。现在我可以在我的类之间使用外键和多对多字段了。

1 个回答

0

因为外键在Foo模型里,所以你需要创建一个FooFormSet(否则,从逻辑上讲,表单里会包含什么就没意义了)。

撰写回答