8

我尝试在 django admin 的字段集中制作一个字段以仅显示某些数据,但根据django 文档,仅显示一个示例list_display可以自定义。我尝试了类似的方法,fieldsets如下所示:

在模型.py 中:

def ports_with_same_scanner(self):
    return PortList.objects.filter(scanner=self.scanner)
ports_with_same_scanner.short_description = 'port_lists'

在 admin.py 中,这不起作用:

fieldsets = (
            ('Scan Template', { 
            'fields': ( ('name', 'scanner', 'ports_with_same_scanner',), 'comment', ('in_use',
                'fc_growing', 'nc_growing'), 'nvt_prefs')
            }),
)

但是,如果我这样做:

list_display = ('name', 'scanner', 'ports_with_same_scanner', 'comment', 'in_use', 'fc_growing', 'nc_growing', 'nvt_prefs')

ports_with_same_scanner作品很好。问题是我不想将显示从 更改fieldsetslist_display,我想知道如何实现相同的功能。谢谢。

4

2 回答 2

6

我不知道过去是否真的有问题......我总是使用简单的方法 - 将方法名称添加到readonly_fields = ()

例子:

models.py

class My(models.Model):

    def custom_name(self):
        return 'test'
    custom_name.allow_tags = False
    custom_name.short_description = 'custom_name'

admin.py

class MyAdmin(admin.ModelAdmin):
    fieldsets = (
            (None, {
                    'fields': ('custom_name', )
            }),
    )
    readonly_fields = ('custom_name', )

它必须工作 Django >=1.7 似乎该方法可以应用于早期版本的 Django^ 但我没有测试

于 2016-04-20T07:46:41.073 回答
5

在模型级别应用过滤器会起作用吗?如果是这样,您可以使用模型的.limit_choices_to属性ForeignKeyField

或者,您可以覆盖 modelAdmin 类的formfield_for_foreignkey属性。

就像是 -

class YourModelAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "ports_with_same_scanner":
            kwargs["queryset"] = PortList.objects.filter(scanner=self.scanner)
        return super(YourModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

(抱歉,如果我误解了这个问题)

于 2013-03-05T17:30:11.713 回答