raw_id_fields:如何显示名称而不是id?

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)

anj*_*505 9

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

  • 哇,我已经在 Django 中专业开发五年了,但不知何故从未遇到过“autocomplete_fields”。很棒的功能。 (6认同)

nof*_*tor 7

我也研究了这个,我认为这是不可能的.我认为你能做的最好的事情就是在原始id字段旁边显示字段的unicode:http://djangosnippets.org/snippets/2108/

或者,您可以显示unicode以及指向值的相应管理员更改页面的链接:http://djangosnippets.org/snippets/2217/


Saz*_*aze 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',)
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)


Gly*_*son 2

对于对象的表示使用__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)