(Django 3.1.6/Python 3.8.7)使用一个命名的方法在字段或字段集admin.py不工作?<



无论我如何尝试,我都不能像在文档中那样使用命名方法作为字段名。最后,我将使该方法检索ForeignKey的字段,但现在我只想弄清楚我在这个简化示例中做错了什么。

在docs.djangoproject.com的这个例子中,他们正在使用类方法'view_birth_date',就像我使用'get_test'(下面)一样,甚至通过我在fieldsets而不是fields中使用它,它应该工作。

我已经尝试过fields =fieldsets =,我得到相同的结果(错误)。它无法找到字段'get_test'。我也试过把def get_test(self)放在fieldsets =上面,但没有什么区别。

它应该与文档中的工作相同,但事实并非如此。我做错了什么?

这应该工作:

@admin.register(Feeddata)
class AdminFeeddata(admin.ModelAdmin):
"""Feeddata admin."""
list_display = ['id', 'eventtime', 'feed']
fieldsets = [
('Meta', {
'fields': ['feed', 'eventtime', 'get_test']
}),
('JSON Data', {
'fields': ('json_data', )
}),
]
# pylint: disable=no-self-use
def get_test(self):
"""Test string."""
return 'test'

但是我得到一个错误:

FieldError at /admin/feeder/feeddata/fff1d764-52cd-499f-9ae9-b1251a806b5b/change/
Unknown field(s) (get_test) specified for Feeddata. Check fields/fieldsets/exclude attributes of class AdminFeeddata.
Request Method: GET
Request URL:    http://localhost:8000/admin/feeder/feeddata/fff1d764-52cd-499f-9ae9-b1251a806b5b/change/
Django Version: 3.1.6
Exception Type: FieldError
Exception Value:    
Unknown field(s) (get_test) specified for Feeddata. Check fields/fieldsets/exclude attributes of class AdminFeeddata.
Exception Location: /usr/local/lib/python3.8/site-packages/django/contrib/admin/options.py, line 711, in get_form
Python Executable:  /usr/local/bin/python
Python Version: 3.8.7
Python Path:    
['/code',
'/code',
'/usr/local/bin',
'/usr/local/lib/python38.zip',
'/usr/local/lib/python3.8',
'/usr/local/lib/python3.8/lib-dynload',
'/usr/local/lib/python3.8/site-packages']
Server time:    Thu, 18 Feb 2021 23:44:12 -0800

忘了添加obj参数也就是get_test方法中的实例模型

@admin.register(Feeddata)
class AdminFeeddata(admin.ModelAdmin):
"""Feeddata admin."""
list_display = ['id', 'eventtime', 'feed']
fieldsets = [
('Meta', {
'fields': ['feed', 'eventtime', 'get_test']
}),
('JSON Data', {
'fields': ('json_data', )
}),
]
# pylint: disable=no-self-use
def get_test(self, obj):
"""Test string."""
return 'test'

这里有一个文档中的例子:

from django.contrib import admin
class AuthorAdmin(admin.ModelAdmin):
fields = ('name', 'title', 'view_birth_date')
def view_birth_date(self, obj):
return obj.birth_date
view_birth_date.empty_value_display = '???'

为了在表单字段集中显示一个自定义字段,这是一个方法的结果,您应该将它传递给readonly_fields。将get_test添加到readonly_fields列表中,如下所示。

@admin.register(Feeddata)
class AdminFeeddata(admin.ModelAdmin):
"""Feeddata admin."""
readonly_fields = ["get_test"] #new
list_display = ['id', 'eventtime', 'feed']
fieldsets = [
('Meta', {
'fields': ['feed', 'eventtime', 'get_test']
}),
('JSON Data', {
'fields': ('json_data', )
}),
]
# pylint: disable=no-self-use
def get_test(self):
"""Test string."""
return 'test'

相关内容

  • 没有找到相关文章

最新更新