当前位置:  开发笔记 > 后端 > 正文

Django中的内联formset - 删除某些字段

如何解决《Django中的内联formset-删除某些字段》经验,为你挑选了2个好方法。

我需要创建一个内联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)

这允许您在模型表级别上执行所有表单验证,排除等,并让工厂复制它.



1> killerbarney..:

在文档中似乎没有说的一件事是,您可以在模型formset的参数中包含一个表单.因此,举例来说,假设你有一个人模型,你可以通过这样做在模型formset中使用它

PersonFormSet = inlineformset_factory(User, Person, form=PersonForm, extra=6)

这允许您在模型表级别上执行所有表单验证,排除等,并让工厂复制它.



2> Carl Meyer..:

这是在管理员中使用的formset吗?如果是这样,只需在InlineModelAdmin上设置" exclude = ['field1','field2']"以排除字段.要显示一些不可编辑的字段值,您必须创建一个简单的自定义窗口小部件,其render()方法只返回值,然后重写formfield_for_dbfield()方法以将窗口小部件分配给适当的字段.

如果这不适用于admin,而是用于其他地方的formset,那么您应该在传递给formset构造函数的ModelForm子类中进行上述自定义(Meta内部类中的exclude属性,__ init__方法中的widget重写).(如果您使用的是Django 1.2或更高版本,则可以使用readonly_fields代替).

如果您澄清您所处的情况(管理员与否),我可以使用代码示例进行更新.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有