我想更改django管理站点中myfield
字段的默认小部件。我需要一个select
小部件,而不是input
。该代码运行良好:
在管理员py公司名称:
from django.contrib import admin
from django import forms
from .models import MyModel
CHOICES = (
("hello", "hello"),
("world", "world")
)
class MyModelAdmin(admin.ModelAdmin):
def formfield_for_dbfield(self, db_field, **kwargs):
print("Raised: ", db_field, kwargs['request'])
if db_field.name == 'myfield':
kwargs['widget'] = forms.Select(choices=CHOICES)
return super(MyModelAdmin, self).formfield_for_dbfield(db_field, **kwargs)
admin.site.register(MyModel, MyModelAdmin)
在模型.py公司名称:
^{pr2}$但有一个问题。formfield_for_dbfield
函数在添加/编辑页面打开时多次提升。单个GET请求有一个日志条目:
...
[22/Dec/2015 17:16:34] "GET /static/admin/js/vendor/xregexp/xregexp.min.js HTTP/1.1" 200 62474
[22/Dec/2015 17:16:34] "GET /static/admin/img/tooltag-add.svg HTTP/1.1" 200 331
Raised: testapp.MyModel.id <WSGIRequest: GET '/admin/testapp/mymodel/add/'>
Raised: testapp.MyModel.myfield <WSGIRequest: GET '/admin/testapp/mymodel/add/'>
Raised: testapp.MyModel.myfield <WSGIRequest: GET '/admin/testapp/mymodel/add/'>
Raised: testapp.MyModel.id <WSGIRequest: GET '/admin/testapp/mymodel/add/'>
Raised: testapp.MyModel.myfield <WSGIRequest: GET '/admin/testapp/mymodel/add/'>
[22/Dec/2015 17:16:39] "GET /admin/testapp/mymodel/add/ HTTP/1.1" 200 5433
[22/Dec/2015 17:16:39] "GET /static/admin/css/forms.css HTTP/1.1" 200 7750
...
有五个调用formfield_for_db_field
,其中三个与myfield
有关。为什么会这样?在我的项目中,我有一个可调用的方法而不是选项,所以我不想在每次请求的结果中多次引发它。在
我找到了更准确的方法来获得这种行为。关键是使用带有重写的
__init__
方法的自定义表单,因此所有字段都可以动态修改,并且每个请求只修改一次。这是的更新版本管理员py公司名称:{cd2>函数只能被一次调用。在
相关问题 更多 >
编程相关推荐