我需要创建一个内联formset
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
killerbarney.. 12
在文档中似乎没有说的一件事是,您可以在模型formset的参数中包含一个表单.因此,举例来说,假设你有一个人模型,你可以通过这样做在模型formset中使用它
PersonFormSet = inlineformset_factory(User, Person, form=PersonForm, extra=6)
这允许您在模型表级别上执行所有表单验证,排除等,并让工厂复制它.
在文档中似乎没有说的一件事是,您可以在模型formset的参数中包含一个表单.因此,举例来说,假设你有一个人模型,你可以通过这样做在模型formset中使用它
PersonFormSet = inlineformset_factory(User, Person, form=PersonForm, extra=6)
这允许您在模型表级别上执行所有表单验证,排除等,并让工厂复制它.
这是在管理员中使用的formset吗?如果是这样,只需在InlineModelAdmin上设置" exclude = ['field1','field2']"以排除字段.要显示一些不可编辑的字段值,您必须创建一个简单的自定义窗口小部件,其render()方法只返回值,然后重写formfield_for_dbfield()方法以将窗口小部件分配给适当的字段.
如果这不适用于admin,而是用于其他地方的formset,那么您应该在传递给formset构造函数的ModelForm子类中进行上述自定义(Meta内部类中的exclude属性,__ init__方法中的widget重写).(如果您使用的是Django 1.2或更高版本,则可以使用readonly_fields代替).
如果您澄清您所处的情况(管理员与否),我可以使用代码示例进行更新.