A.V*_*ila 21 python django django-admin
自定义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)
Run Code Online (Sandbox Code Playgroud)
在admin.py
:
class StructureAdmin(tree_editor.TreeEditor):
search_fields = ('name',)
raw_id_fields = ('parent',)
Run Code Online (Sandbox Code Playgroud)
In django2.1
you can use autocomplete_fields
. It will work just like ajax select2.
In admin.py
class StructureAdmin(tree_editor.TreeEditor):
search_fields = ('name',)
autocomplete_fields = ('parent',)
Run Code Online (Sandbox Code Playgroud)
参考:https : //docs.djangoproject.com/en/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.autocomplete_fields
我也研究了这个,我认为这是不可能的.我认为你能做的最好的事情就是在原始id字段旁边显示字段的unicode:http://djangosnippets.org/snippets/2108/
或者,您可以显示unicode以及指向值的相应管理员更改页面的链接:http://djangosnippets.org/snippets/2217/
看来这个插件: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',)
Run Code Online (Sandbox Code Playgroud)
您也可以在管理过滤器中使用 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),
)
Run Code Online (Sandbox Code Playgroud)
对于对象的表示使用__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)
Run Code Online (Sandbox Code Playgroud)
在Python 3中使用
def __str__(self):
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14742 次 |
最近记录: |