gpt4 book ai didi

django - 如何在 Django 模型表单中显示用户的 get_full_name() 而不是用户名?

转载 作者:行者123 更新时间:2023-12-03 21:13:14 26 4
gpt4 key购买 nike

我有一个引用 ForeignKey(User) 的模型 field 。

当用户在他的表单上选择一个项目时,我希望他们能够看到 get_full_name()而不仅仅是 username .

class Books(models.Model):
author = models.ForeignKey(User)

最佳答案

这可以通过多种方式完成。

创建 User 的代理子类并覆盖其 __unicode__()返回用户全名的方法。

class UserFullName(User):
class Meta:
proxy = True

def __unicode__(self):
return self.get_full_name()

现在在您的模型表单中,使用 UserFullName检索用户。
class BookForm(forms.ModelForm):
author = forms.ModelChoiceField(queryset=UserFullName.objects.all())
class Meta:
model = Book

另一种方法是在表单的构造函数中动态填充选项。
class BookForm(forms.ModelForm):

def __init__(self, *args, **kwargs):
super(BookForm, self).__init__(*args, **kwargs)
users = User.objects.all()
self.fields['author'].choices = [(user.pk, user.get_full_name()) for user in users]

class Meta:
model = Book

或许,lazerscience 展示了最“djangonic”的方式,作为对类似问题的回答 Django forms: how to dynamically create ModelChoiceField labels .它子类 ModelChoiceField并覆盖其 label_from_instance()旨在提供选择标签的方法。
class UserFullnameChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return smart_unicode(obj.get_full_name())

class BookForm(forms.ModelForm):
author = UserFullnameChoiceField(queryset=User.objects.all())

class Meta:
model = Book

关于django - 如何在 Django 模型表单中显示用户的 get_full_name() 而不是用户名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3966483/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com