我对 python 或 django 非常陌生。我继承了一些需要“修复”的代码,我可以使用一些帮助。
情况如下:
我们有一个下拉框,您可以从中选择多个用户。目前,用户显示为用户名。我们希望它们显示为全名。
问题:用户名来自:django.contrib.auth
名字和姓氏来自配置文件模型。下面是 Profile 模型的样子:
class Profile(models.Model):
CURRENTLY_STUDENT = "STU"
CURRENTLY_PROFESSOR = "PFR"
CURRENTLY_CHOICES = [
(CURRENTLY_STUDENT, "Student"),
(CURRENTLY_PROFESSOR, "Professor"),
]
user = models.OneToOneField(User, related_name="profile")
currently_am = models.CharField(max_length=3, choices=CURRENTLY_CHOICES, default=CURRENTLY_STUDENT)
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
如果您必须显示全名,我们使用以下内容:
user.profile.display_name
其中 display_name 是:
def display_name(self):
name = "%s %s" % (self.first_name, self.last_name)
return name
下面是forms.py中下拉框的代码:
from django import forms
from django.contrib.auth.models import User
from account.utils import user_display
class UserMultipleChoiceField(forms.ModelMultipleChoiceField):
def label_from_instance(self, obj):
return user_display(obj)
class ShareForm(forms.Form):
participants = UserMultipleChoiceField(
queryset=User.objects.none(),
label="",
widget=forms.SelectMultiple(
attrs={
"data-placeholder": "Choose members.. "
}
)
)
以下是 account/utils.py 中的代码user_display
from account.conf import settings
def user_display(user):
return settings.ACCOUNT_USER_DISPLAY(user)
这是来自 account/conf.py 的代码
class AccountAppConf(AppConf):
USER_DISPLAY = lambda user: user.username
您不能使用
obj.get_full_name()
名字和姓氏不是来自 django.contrib.auth 而是存储在上述配置文件模型中。您也不能使用 return obj.profile.display_name(),因为 ModelChoiceField 是在 django.contrib.auth 上绘制的。
有人可以帮我解决这个问题吗?一旦有人从下拉列表中做出选择并点击提交,如何在下拉框中显示全名并仍将“用户”作为值传递?
感谢您的帮助 :)