0

我对 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 上绘制的。

有人可以帮我解决这个问题吗?一旦有人从下拉列表中做出选择并点击提交,如何在下拉框中显示全名并仍将“用户”作为值传递?

感谢您的帮助 :)

4

1 回答 1

1

好吧,您可以将自定义选择分配为:

choices = [(obj.id, obj.profile.display_name()) for obj in User.objects.all()]

participants = UserMultipleChoiceField(
    queryset=User.objects.none(),
    label="",
    widget=forms.SelectMultiple(
        attrs={
            "data-placeholder": "Choose members.. "
        }
    ),
    choices=choices
)
于 2013-04-06T18:17:35.667 回答