django inlineformset_factory лишний атрибут игнорируется? - PullRequest
1 голос
/ 13 января 2012

Я пытаюсь отобразить 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»). Есть идеи, что я делаю не так?

Спасибо


Обновление:

Оказывается, часть проблемы в том, что все мои классы моделей наследуются от одного базового класса. Если я заставлю их просто наследоваться от моделей. Модель, то проблема исчезнет (хотя другие проблемы поднимают их уродливые головы). Я до сих пор хочу, чтобы они унаследовали от одного класса, поэтому мой оригинальный вопрос остается.


Обновление Обновление:

Создание базового класса моих моделей абстрактным:

 class BaseClass(models.Model):
     class Meta:
         abstract = True

Кажется, чтобы сделать трюк. Теперь у меня могут быть ForeignKeys и ManyToManyFields между моими классами.

1 Ответ

0 голосов
/ 13 января 2012

Поскольку внешний ключ существует в модели Foo, вам необходимо создать Foo FormSet (иначе, логически, не имеет смысла, что будет содержать форма).*

...