2014-07-22 82 views
0

我想在调查/测试(类似Google表单)中显示一个表单以回答多种类型的问题。我的模型设置为我有一个Test模型,Answer模型带有Test的外键,Answer的子类(如多项选择,简答题)以及该问题类型所需的额外字段。使用模型子类(或多个模型)的Django内联formset

我的第一个想法是使用内联formset来显示答案的字段。但是,如果我为Answer创建了内嵌窗体集,则表单仅显示此超类的字段,而不显示特定的子类答案类型。它不会出现(基于我的搜索),可以创建一个多种模型类型的内联表单。这个功能可能吗?

(它发生,我认为它可能是由创建每个Answer的个人表单列表基本上是手动滚动一个formset可能的,但是这似乎并不像一个很优雅的解决方案。)

+0

如果您正在使用CBV的检查django-extra-views包含内联表单集(创建和更新视图)。 – petkostas

+0

这个问题不是缺乏内嵌式表单的CBV;这是内联formset没有完成工作。 – Pterosaur

+0

对不起,但我没有看到任何类型的代码(模型相关),以便更清楚,如果我是正确的,你有一个Abstract Answer模型类,并从那里实现一个具体的?如果是的话,为每个答案和内联再次ModelForm可能是解决方案,为了避免DRY我会检查额外的视图类和重写他们注入不同的模型。 – petkostas

回答

0

如果我了解正确的:

def get_inline_by_model(m): 
    return type(
     'YourInline', 
     (admin.StackedInline,), 
     {'model' : m, 'extra' : 0,'form' : YourAdminForm,'max_num' : 1,'fields' :('key','value')} 
    ) 

,并在你的管理模式:

inlines = [ 
     get__inline_by_model(models.YourModel), 
    ] 

在这娃,你可以为每个模型创建动态直列您可以对多个模型使用相同的内联表格

+0

我正在创建的内容不在管理员中。这只是一个正常的观点。 – Pterosaur