相关疑难解决方法(0)

Django - 覆盖get_form以根据请求自定义管理表单

我尝试过各种方法来实现这一目标.

我决定不要覆盖formfield_for_dbfield,因为它没有得到请求对象的副本,我希望避免使用thread_locals hack.

我决定在我的ModelAdmin类中重写get_form并尝试以下方法:

class PageOptions(admin.ModelAdmin):
    def get_form(self, request, obj=None, **kwargs):
        if request.user.is_superuser:
            self.fieldsets = ((None, {'fields': ('title','name',),}),)
        else:
            self.fieldsets = ((None, {'fields': ('title',),}),)
        return super(PageOptions,self).get_form(request, obj=None, **kwargs)
Run Code Online (Sandbox Code Playgroud)

当我从get_form中打印fieldsets或declared_fieldsets时,我得到None(或者我在PageOptions中设置的初始值).

为什么这不起作用,是否有更好的方法来做到这一点?

django django-admin

12
推荐指数
4
解决办法
3万
查看次数

如何仅在更改视图中显示自定义字段(admin)

我是Python和Django的新手:)我需要一些帮助.

我想做的事:

我有一个模型页面,我需要在有人尝试更新一个对象时添加自定义字段"消息".

为什么?因为我正在建立一个修订系统.这个领域,它只是对变化的解释.所以这个字段没有链接到Page(但是链接到另一个模型PageRevision)

经过一些研究,我设法将此字段添加到admin.py文件中的表单,如下所示:

class PageAdminForm(forms.ModelForm):
    # custom field not backed by database
    message = forms.CharField(required=False)

    class Meta:
        model = Page
Run Code Online (Sandbox Code Playgroud)

它的工作,我的领域现在显示...但我不希望这个领域到处都是.就在有人试图更新Page对象时.我发现这个答案不同的字段为添加和更改页面在管理员,但它不适合我,因为它是一个自定义字段(我认为).

我在admin.py中的其余代码:

class PageAdmin(admin.ModelAdmin):
    form = PageAdminForm
    fields = ["title", "weight", "description", "message"]
    list_display = ["title", "weight", "description"]
    list_filter = ["updated_at"]

    def get_form(self, request, obj=None, **kwargs):
        if obj is None:
            # not working ?
            kwargs['exclude'] = ['message']
        # else:
        #     kwargs['exclude'] = ['message']
        return super(PageAdmin, self).get_form(request, obj, **kwargs)

    def save_model(self, request, obj, form, change): …
Run Code Online (Sandbox Code Playgroud)

django django-admin

2
推荐指数
1
解决办法
3948
查看次数

标签 统计

django ×2

django-admin ×2