在 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_list
是 QuerySet
的 User
对象,不具有您要查找的属性。
您应该使用user.get_profile.rating
和user.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?