配置文件显示所有用户django的用户对象

时间:2014-08-20 22:25:01

标签: django django-models django-forms

我在个人资料应用中有自定义用户和个人资料应用我有以下型号:

class Profile(models.Model):
    user = models.OneToOneField(MyUser,unique=True)
    name = models.CharField(_('Name'),max_length=100)
    work = models.CharField(_('Position'),max_length=200)
    company = models.CharField(_('Company'),max_length=200)
    gender = models.CharField(_('Gender'),max_length=10)
    photo = models.ImageField(_('Profile Pic'),upload_to='images/',blank=True)
    bio = models.TextField(_('Bio'),max_length=300) 
    def __str__(self):
            return self.name

我的主要问题是,当我在表单中包含用户字段时,它会显示在应用程序中注册的所有用户的下拉列表。

我想只显示登录用户

2 个答案:

答案 0 :(得分:0)

这是一个特定于您使用的表单的问题,而不是模型。您要做的是为字段user指定查询集。

您可以在实例化初始表单后执行此操作。以下内容将在您的视图中显示,您可以在其中声明获取请求的表单:

# Obtain set of authenticated users (see [1] below)
authenticated_users = []
users = User.objects.all()

for user in users:
    if user.is_authenticated():
        authenticated_users.append(user)

# Instantiate form and update `user` queryset
form = SomeForm()
form.fields['user'].queryset = authenticated_users

[1] 我不相信可以根据用户是否经过身份验证来过滤用户对象管理器,不幸的是,您必须遍历查询集并检查每个用户。如果有人知道这样的问题,那么我很乐意改变我的答案。

这将限制经过身份验证的用户的下拉列表。

答案 1 :(得分:0)

我认为这种方法更好,节省时间:

user = MyUser.objects.filter(username__icontains=request.user)
form.fields['user'].queryset = user