raw_id_fields:如何显示名称而不是ID?
在自定义Django的管理面板时,我使用了raw_id_fields
,这样可以从一个有成千上万条数据的模型中选择外键,因为默认的下拉选择框在这么多选项面前实在不方便。
这个方法是有效的,但它显示的是ID,如下图所示:

有没有办法显示名称或者其他字段,而不是ID呢?或者,有没有比使用raw_id_fields
更好的方法来实现这个功能?
这是我在models.py
中的代码:
class Structure(MPTTModel):
name = models.CharField(max_length=200, unique=True, verbose_name = _('name'))
parent = TreeForeignKey('self', null=True, blank=True, related_name='children', verbose_name = _('parent'))
def __unicode__(self):
return u"%s" % (self.name)
在admin.py
中:
class StructureAdmin(tree_editor.TreeEditor):
search_fields = ('name',)
raw_id_fields = ('parent',)
4 个回答
5
看起来这个插件:https://github.com/lincolnloop/django-dynamic-raw-id
正好能满足你的需求:
(以下内容摘自文档):
使用方法
要在你的应用中开始使用django-dynamic-raw-id,你只需要在你的ModelAdmin类中实现DynamicRawIDMixin,并把想要的字段添加到dynamic_raw_id_fields的列表中:
from dynamic_raw_id.admin import DynamicRawIDMixin
class UserProfileAdmin(DynamicRawIDMixin, admin.ModelAdmin):
dynamic_raw_id_fields = ('user',)
你还可以在管理界面的过滤器中使用dynamic_raw_id小部件:
from dynamic_raw_id.admin import DynamicRawIDMixin
from dynamic_raw_id.filters import DynamicRawIDFilter
class UserProfileAdmin(DynamicRawIDMixin, admin.ModelAdmin):
list_filter = (
('dynamic_raw_id_fk', DynamicRawIDFilter),
)
8
我也研究过这个问题,我觉得这是不可能的。我认为你能做的最好的事情就是在原始ID字段旁边显示这个字段的unicode值:http://djangosnippets.org/snippets/2108/
另外,你可以显示unicode值,并提供一个链接,指向该值对应的管理页面:http://djangosnippets.org/snippets/2217/
44
从Django 2.0开始,你可以使用 autocomplete_fields
这个功能。它的工作方式就像是ajax select2那样。
在 admin.py
文件中
class StructureAdmin(tree_editor.TreeEditor):
search_fields = ('name',)
autocomplete_fields = ('parent',)