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