自定义Django Admin面板,我正在使用raw_id_fields
从具有数千个元素的Model中选择ForeignKey,因为默认的select-box下拉列表对于这么多元素都不方便。
它可以工作,但它显示了在此图像上可以看到的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',)
答案 0 :(得分:6)
我也研究了这个,我认为不可能。我认为您可以做的最好的事情是在原始ID字段旁边显示字段的unicode:http://djangosnippets.org/snippets/2108/
或者,您可以显示unicode以及指向该值的相应管理员更改页面的链接:http://djangosnippets.org/snippets/2217/
答案 1 :(得分:3)
看来这个插件:https://github.com/lincolnloop/django-salmonella
做你想做的事:
(从文档中复制):
用法
要在您的应用程序中开始使用django-salmonella所有您需要做的就是在ModelAdmin类中实现SalmonellaMixin并将所需的字段添加到salmonella_fields列表中:
from salmonella.admin import SalmonellaMixin
class UserProfileAdmin(SalmonellaMixin, admin.ModelAdmin):
salmonella_fields = ('user',)
您也可以在管理过滤器中使用沙门氏菌小部件:
from salmonella.admin import SalmonellaMixin
from salmonella.filters import SalmonellaFilter
class UserProfileAdmin(SalmonellaMixin, admin.ModelAdmin):
list_filter = (
('salmonella_fk', SalmonellaFilter),
)
答案 2 :(得分:3)
在django2.1
中,您可以使用autocomplete_fields
。它将像ajax select2一样工作。
在admin.py
class StructureAdmin(tree_editor.TreeEditor):
search_fields = ('name',)
autocomplete_fields = ('parent',)
答案 3 :(得分:0)
对于对象的表示,请使用__unicode__
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
def __unicode__(self):
return u'%s %s' % (self.first_name, self.last_name)
在Python 3中使用
def __str__(self):