django admin:如何在fieldets中自定义一个字段? [英] django admin: How to customize one field in fieldsets?

查看:201
本文介绍了django admin:如何在fieldets中自定义一个字段?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试在django管理员的字段中设置一个字段来仅显示某些数据,但根据 django文档,只有 list_display 的示例显示为能够自定义。我在 fieldsets 中尝试了类似的方法,如下所示:



在models.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')
pre>

ports_with_same_scanner 只是f国家统计局。问题是我不想将我的显示从 fieldsets 更改为 list_display ,我想知道如何才能实现相同的功能。谢谢。

解决方案

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



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



某些东西 -

  class YourModelAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self,db_field,request,** kwargs):
如果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)




I try to make one field in django admin's fieldsets to show only certain data, but according to django document, only an example of list_display is shown to be able to customize. I tried the similar approach on fieldsets like the following:

In models.py:

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

In admin.py, this won't work:

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

However, if I do this:

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

the ports_with_same_scanner works just fine. The problem is that I don't want to change my display from fieldsets to list_display, I wonder how can I achieve the same functionality. Thanks.

解决方案

Would it work to apply the filter at the model level? If so you can use the limit_choices_to attribute on the model's ForeignKeyField.

Alternatively you could override the formfield_for_foreignkey attribute of the modelAdmin class.

Something like -

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)

(Apologies if I've misunderstood the question)

这篇关于django admin:如何在fieldets中自定义一个字段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆