我想在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)
答案 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)