Sha*_*ang 6 django admin fieldset
我尝试在django admin的fieldsets中创建一个字段以仅显示某些数据,但根据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'
Run Code Online (Sandbox Code Playgroud)
在admin.py中,这不起作用:
fieldsets = (
('Scan Template', {
'fields': ( ('name', 'scanner', 'ports_with_same_scanner',), 'comment', ('in_use',
'fc_growing', 'nc_growing'), 'nvt_prefs')
}),
)
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做:
list_display = ('name', 'scanner', 'ports_with_same_scanner', 'comment', 'in_use', 'fc_growing', 'nc_growing', 'nvt_prefs')
Run Code Online (Sandbox Code Playgroud)
该ports_with_same_scanner作品就好了.问题是我不想将显示更改fieldsets为list_display,我想知道如何实现相同的功能.谢谢.
是否可以在模型级别应用过滤器?如果是这样,您可以在模型上使用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)
Run Code Online (Sandbox Code Playgroud)
(如果我误解了这个问题,请道歉)
我不知道过去是否真的有问题......我总是使用简单的方法 - 将方法名称添加到 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'
Run Code Online (Sandbox Code Playgroud)
admin.py
class MyAdmin(admin.ModelAdmin):
fieldsets = (
(None, {
'fields': ('custom_name', )
}),
)
readonly_fields = ('custom_name', )
Run Code Online (Sandbox Code Playgroud)
它必须工作 Django >=1.7 似乎这种方法可以应用于早期版本的 Django^ 但我没有测试
| 归档时间: |
|
| 查看次数: |
9522 次 |
| 最近记录: |