Python Django如何在views.py中获取已登录用户的价值?

时间:2018-03-24 14:18:55

标签: python django class django-views

我有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')

2 个答案:

答案 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 %}