0

我想在 Django 管理模型的下拉列表中更改项目(用户)的名称。我想在不改变基本模型的情况下做到这一点。

我只想通过用户名(只是没有名字和姓氏)在 Worker 模型(office.py)中字段“用户”(admin.py)指“用户”

管理员.py

from .models import Token

class TokenAdmin(admin.ModelAdmin):
    model = Token

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

模型.py

from office.models import Worker

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

办公室.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)
4

1 回答 1

1

我已经解决了!

管理员.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)
于 2017-11-06T13:23:48.510 回答