我有CustomUser
类用于记录,另一个类coach
我有关于我的用户的信息。每个用户都与教练班相关联。
我想创建模板,我的用户如果已完成他们的个人资料将看到他们的信息,如果他们没有完成他们,他们将看到一条消息。我正在学习Python Django,我不知道如何从类Adresse
获取coach
我记录的用户,并检查它是否为空。
知道如何解决这个问题吗?
我的views.py
d
def Profile(request):
u = request.user.username
x = u.coach.Adresse
if len(x)!= 0:
completed = "profile completed"
return render(request, 'Profile.html', {'completed': completed})
else:
notcompleted = "please complete your profile"
return render(request, 'Profile.html', {'notcompleted': notcompleted})
我的models.py
class coach(models.Model):
user = models.OneToOneField(CustomUser,on_delete=models.CASCADE)
Adresse = models.TextField(max_length=140, default='DEFAULT VALUE')
Telephone = models.IntegerField(null=True, max_length=140, default='111')
答案 0 :(得分:0)
最不痛苦的,实际上Django推荐的方法是通过OneToOneField(User)
属性。
Extending the existing User model …
如果您希望存储与用户相关的信息,您可以使用 与包含字段的模型的一对一关系 附加信息。这种一对一的模型通常被称为a 配置文件模型,因为它可能存储有关a的非身份验证相关信息 网站用户。
那就是说,延长django.contrib.auth.models.User
并取代它也有效......
替换自定义用户模型某些类型的项目可能具有 Django的内置User模型的身份验证要求 并不总是合适的。例如,在某些网站上它会产生更多 感觉使用电子邮件地址作为您的识别令牌而不是 用户名。
[编辑:两个警告和通知随后,提到这是 相当激烈。]
而不是编写自己的UserClass只是扩展现有的用户模型..
答案 1 :(得分:0)
您的请求会自动添加到模板中,这意味着您可以在模板中访问它,并且无需在上下文中传递它。它由render
函数传递给模板。
请在Profile.html
模板中写下:
{% if request.user.is_authenticated %}
<p>
{% if request.user.coach.Adresse != 'DEFAULT VALUE' %}
Profile Completed
{% else %}
Please complete your profile
{% endif %}
</p>
{% endif %}
并将Profile
方法更改为
def Profile(request):
return render(request, 'Profile.html')
但我认为您应该更改Adresse字段,因为我认为您没有理由使用默认值。只需删除默认值并允许它为空并且为null,如下所示:
Adresse = models.TextField(max_length=140, blank=True, null=True)
在模板而不是{% if request.user.coach.Adresse != 'DEFAULT VALUE' %}
中写{% if request.user.coach.Adresse %}