Django ModelAdmin - 下拉列表中项目的自定义名称

时间:2017-11-06 12:08:48

标签: django django-models foreign-keys django-admin django-modeladmin

我想在Django Admin Model的下拉列表中更改项目(用户)的名称。我想在没有任何基本模型变化的情况下这样做。

我只想表示用户'(admin.py)是指用户'在工作者模型(office.py)中通过用户名(只是没有名字和姓氏)

admin.py

from .models import Token

class TokenAdmin(admin.ModelAdmin):
    model = Token

    fieldsets = (
        (None, {
            'fields': ('name', 'key', 'user')
        }),

models.py

from office.models import Worker

class Token(models.Model):
    user = models.ForeignKey(
            Worker,
            related_name='auth_token',
            verbose_name=_("api.models.token.user")
        )

office.py

class Worker(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, verbose_name=_("User"))
    firstname = models.CharField(
        _("Firstname"), blank=False, null=False, max_length=50)
    lastname = models.CharField(
        _("Lastname"), blank=False, null=False, max_length=50)

    def __str__(self):
        return "%s %s" % (self.lastname, self.firstname)

1 个答案:

答案 0 :(得分:0)

我已经解决了!

<强> admin.py

class UserChoiceField(forms.ModelChoiceField):
    def label_from_instance(self, obj):
        return obj.user

class TokenAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
        if db_field.name == 'user':
            kwargs['form_class'] = UserChoiceField
        return super(TokenAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)