2012-01-13 122 views
1

我想呈現一個inlineformset,但「額外」屬性似乎被忽略。請考慮以下型號:django inlineformset_factory被忽略的額外屬性?

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。

回答

0

由於外鍵的Foo模型存在,你需要創建一個FooFormSet(否則,在邏輯上,它沒有任何意義,以什麼形式將包含)。

+0

謝謝你的回覆。對於ForeignKeys我很困惑。假設我想表示比薩可以有很多配料;是不是「披薩」類的「頂部」領域,這是「頂部」類的外鍵?假設我想添加多個澆頭,我不能使用「Topping_formset = inlineformset_factory(Pizza,Topping)」的inlineformsetset嗎?你似乎是在暗示相反的意思。 – trubliphone 2012-01-13 19:40:57