在 django 中扩展用户模型 - 检索数据

Posted

技术标签:

【中文标题】在 django 中扩展用户模型 - 检索数据【英文标题】:extending user model in django - retrieving data 【发布时间】:2012-10-11 00:16:11 【问题描述】:

我用以下模型扩展了用户模型:

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    designs = models.ManyToManyField('Design', blank=True)
    prints = models.ManyToManyField('Print', blank=True)
    rating = models.IntegerField(null=True, blank=True)
    reliability = models.IntegerField(null=True, blank=True)
    av_lead_time = models.IntegerField(null=True, blank=True)

我已验证此 OneToOne 字段有效,因为它包含在管理员的用户字段中。现在我需要用它来创建一个用户字段(包括用户和用户配置文件)的 html 表。我正在尝试以下代码,但没有返回任何内容:

user_list = User.objects.all()
    return render_to_response('index.html', 
        'user_list': user_list    
    )

模板:

% for user in user_list %
    <tr>
        <td> user.rating </td>
        <td> user.reliability </td>
        <td>4</td>
        <td>2</td>
        <td>96</td>
        <td>£4.56</td>
        <td class="success printButton radius">Add to Cart</td>
    </tr>
% endfor %

谁能帮忙?

【问题讨论】:

How to access the user profile in a Django template? 的可能重复项 @danihp 不完全是:babbaggeii 不知道他必须访问用户个人资料。 我刚刚尝试使用 request.user.username 并没有返回任何内容。我还需要添加其他内容吗? @babbaggeii 要使用 request.anything ,您需要使用RequestContext,您应该始终一直使用它。 【参考方案1】:

user_listQuerySetUser 对象,不具有您要查找的属性。

您应该使用user.get_profile.ratinguser.get_profile.reliability

确实,get_profile() 将返回与User 关联的配置文件,前提是您将设置AUTH_PROFILE_MODULE 设置为UserProfile 类型。在模板中,您无需使用()user.get_profile 可让您访问user 的个人资料。

您还需要首先确保用户确实拥有个人资料。


配置文件在 Django 1.5 中将消失,所以现在可能不是开始使用它们的最佳时机!

【讨论】:

我还必须包含其他内容吗?我刚刚尝试过 user.get_profile.rating 和 user.username ,它们都返回空白。 @babbaggeii 您确定您的user_list 中有任何内容吗?你能用 % debug % 来调查吗?

以上是关于在 django 中扩展用户模型 - 检索数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中扩展用户对象:用户模型继承还是使用 UserProfile?

在 Django 中使用更多字段扩展用户模型的最佳方法是啥?

在 Django 中使用自定义字段扩展用户模型

扩展 Django 1.11 用户模型

如何在mongodb中扩展django的默认用户?

18_django的用户模型和扩展django的用户模型