通过身份验证的用户ID获取人员ID

时间:2018-07-28 19:21:55

标签: python django

我尝试获取与用户模型相关的我的Person模型的个人ID

from django.db import models
from django.contrib.auth.models import User


    class Person(models.Model):
        user = models.ForeignKey(User, blank=False, null=False, on_delete=models.CASCADE)
        middle_name = models.CharField(max_length=30)

        def __str__(self):
            return '%s %s %s' % (self.user.last_name, self.user.first_name, self.middle_name)

从模板生成的页面开始,但我只能获得立即通过身份验证的用户ID

{{ user.id }}

但不提供人员编号。

如何通过页面上的用户ID获取人员ID?

4 个答案:

答案 0 :(得分:0)

对于这种关系,我建议使用OneToOneField。

user = models.OneToOneField(User, blank=False, null=False, on_delete=models.CASCADE)

然后您可以使用user.person

答案 1 :(得分:0)

我认为您的模型存在逻辑问题。通常,一个人应该与一个用户建立联系,因此您应该使用OneToOneField而不是ForeignKey。我们认为您是正确的,然后可以按照以下代码进行操作;如果不正确,则也可以使用。 您可以通过上下文变量获取它 假设您的person=Person.obejcts.get(id=1) 然后通过

之类的上下文传递它
def view(request):
    person=Person.obejcts.get(id=1)
    context = { 'person':person}
   return render(request, 'your.html', context}

在模板中,您可以使用{{person.id}}

答案 2 :(得分:0)

您只需执行obj即可。假设您知道pk ...如果您实际上只存储1个人和1个用户,然后将{{ user.person_set.get(pk=1) }}替换为.get() ...您可以使用{{1 }和其他查询集一样进行操作。显然,这假设您有1个用户的多个用户。否则,使用1:1字段会更容易。

答案 3 :(得分:0)

从模型中

django自动反向查找外键(用户字段),如果要获取人员ID,请尝试使用此getClass().getClassLoader().getResource()