我需要创建一个内联表单集,
a)从正在显示的MyModel
中完全排除某些字段
b)显示一些字段MyModel
,但阻止它们被编辑。
我尝试使用下面的代码,使用values()
将查询集过滤为我希望返回的那些值。然而,这失败了。
有谁有什么想法吗?
class PointTransactionFormset(BaseInlineFormSet):
def get_queryset(self):
qs = super(PointTransactionFormset, self).get_queryset()
qs = qs.filter(description="promotion feedback")
qs = qs.values('description','points_type') # this does not work
return qs
class PointTransactionInline(admin.TabularInline):
model = PointTransaction
#formset = points_formset()
#formset = inlineformset_factory(UserProfile,PointTransaction)
formset = PointTransactionFormset
发布于 2011-01-26 03:55:06
文档中似乎没有提到的一件事是,您可以在模型表单集的参数中包含表单。例如,假设您有一个person模型表单,您可以通过执行以下操作在模型表单集中使用它
PersonFormSet = inlineformset_factory(User, Person, form=PersonForm, extra=6)
这允许您在模型表单级别上执行所有表单验证、排除等操作,并让工厂对其进行复制。
发布于 2009-03-07 12:30:21
这是在管理员中使用的表单集吗?如果是这样,只需在InlineModelAdmin上设置"exclude = 'field1','field2'“即可排除字段。要显示一些不可编辑的字段值,您必须创建一个简单的自定义小部件,它的render()方法只返回值,然后覆盖formfield_for_dbfield()方法以将小部件分配给适当的字段。
如果这不是供管理员使用的,而是供其他地方使用的表单集,那么您应该在传递给表单集构造函数的ModelForm子类中进行上述自定义( Meta内部类中的exclude属性,__init__方法中的小部件覆盖)。(如果您使用的是Django1.2或更高版本,则可以直接使用readonly_fields )。
我可以更新代码示例,如果你澄清你在哪种情况下(管理员或非管理员)。
发布于 2009-09-09 02:43:34
我刚刚遇到了一个类似的问题(不是针对管理员,而是针对面向用户的站点),我发现您可以将想要显示的表单集和字段传递到inlineformset_factory
中,如下所示:
factory = inlineformset_factory(UserProfile, PointTransaction,
formset=PointTransactionFormset,
fields=('description','points_type'))
formset = factory(instance=user_profile, data=request.POST)
其中user_profile
是一个UserProfile
。
需要注意的是,如果底层模型所需的字段没有包含在传递到inlineformset_factory
中的字段列表中,那么这可能会导致验证问题,但任何类型的表单都是如此。
https://stackoverflow.com/questions/559361
复制相似问题