Django 添加到ModelAdmin的链接

Django 添加到ModelAdmin的链接,django,django-admin,django-modeladmin,Django,Django Admin,Django Modeladmin,我有一个ModelForm: class SomeModelForm(forms.ModelForm): class Meta: model = SomeModel def __init__(self, *args, **kwargs): super(ApiBackendConfigForm, self).__init__(*args, **kwargs) if kwargs['instance'].name == u'Some_

我有一个
ModelForm

class SomeModelForm(forms.ModelForm):
    class Meta:
        model = SomeModel

    def __init__(self, *args, **kwargs):
        super(ApiBackendConfigForm, self).__init__(*args, **kwargs)
        if kwargs['instance'].name == u'Some_name':
            self.fields['method_config'] = forms.URLField()
ModelAdmin

class SomeAdmin(admin.ModelAdmin):
    form = SomeModelForm
    list_display = ('name', 'alias', 'is_enabled', )
    list_editable = ('is_enabled', )
    readonly_fields = ('name', 'alias', )
第一个问题,
方法配置
字段不显示。我知道,它不在
list\u display
中,但如果我将其添加到
list\u display
,则会导致错误


第二个主要问题:如何添加到其他
ModelAdmin
的链接?
修改
self.fields
可能不是线程安全的。这意味着,如果您在第一次请求时修改self.fields,所有其他请求都将获得该修改版本

检查更改要动态显示的字段的方法。在changeview中处理表单。如果您想在changelist视图中显示自定义字段,只需使用方法名而不是字段来修改list\u display

例如:

class SomeAdmin(admin.ModelAdmin):
    list_display = ('name', 'alias', 'is_enabled', 'show_method_config', )
    list_editable = ('is_enabled', )
    readonly_fields = ('name', 'alias', )

    def show_method_config(self,obj):
        return getattr(obj,"method_config","") if obj.name == u"Some_name" else ""
    show_method_config.short_description = _(u"Method config")
    show_method_config.admin_order_field = "method_config"
    show_method_config.allow_tags = True

    def get_fields(self, request, obj=None):
        fields = super(SomeAdmin, self).get_fields(request, obj)
        if obj and obj.name == u"Some_name":
            fields.append("method_config")
        return fields

修改
self.fields
可能不是线程安全的。这意味着,如果您在第一次请求时修改self.fields,所有其他请求都将获得该修改版本

检查更改要动态显示的字段的方法。在changeview中处理表单。如果您想在changelist视图中显示自定义字段,只需使用方法名而不是字段来修改list\u display

例如:

class SomeAdmin(admin.ModelAdmin):
    list_display = ('name', 'alias', 'is_enabled', 'show_method_config', )
    list_editable = ('is_enabled', )
    readonly_fields = ('name', 'alias', )

    def show_method_config(self,obj):
        return getattr(obj,"method_config","") if obj.name == u"Some_name" else ""
    show_method_config.short_description = _(u"Method config")
    show_method_config.admin_order_field = "method_config"
    show_method_config.allow_tags = True

    def get_fields(self, request, obj=None):
        fields = super(SomeAdmin, self).get_fields(request, obj)
        if obj and obj.name == u"Some_name":
            fields.append("method_config")
        return fields

我认为你没有提供足够的信息。当您将
方法\u配置
添加到
列表\u显示
时,您希望它显示什么。您希望在何处显示链接,以及您希望链接到什么?@Alasdair,
method\u config
应显示指向尚未写入的新ModelAdmin的链接。具体取决于object.name编辑项目时是否希望有表单字段,或显示概览时仅显示链接?我仍然不明白你想要链接到哪个url。我认为你没有显示足够的信息。当您将
方法\u配置
添加到
列表\u显示
时,您希望它显示什么。您希望在何处显示链接,以及您希望链接到什么?@Alasdair,
method\u config
应显示指向尚未写入的新ModelAdmin的链接。具体取决于object.name编辑项目时是否希望有表单字段,或显示概览时仅显示链接?我仍然不明白您要链接到哪个url。
method\u config
不是一个模型字段,它没有显示任何内容如果您想生成特定模型视图的url地址,请尝试从django.core.urlResolver导入反向
反向(“管理员:{app_label}}{model_name}}}{add”)
检查所有可用的路由。
方法_-config
不是一个模型字段,它没有显示任何内容如果您想生成特定模型视图的url地址,请尝试从django.core.urlResolver导入反向
反向(“管理:{app_-label}}{{model_-name}}}}}{add”)
检查所有可用路由。