如何从用户配置文件中查询数据,因为删除了getProfile()?

时间:2015-05-06 14:45:56

标签: django django-models

我的理解是,自Django 1.5以来,自定义用户模型是可能的,但不是必需的。事实上,格林菲尔德和罗伊在“两勺Django”中争辩说,有时候(比如创建第三方套装)“Profile”模型仍然是要走的路。 由于getProfile()已被删除,我不知道如何在模板中定位我的配置文件数据。这是因为:

{{ request.user.get_profile.id }}

不再生成任何数据,我尝试过:

{{ request.user.userprofile.id }}

但这也不会产生任何价值。

所以我的问题是,给出以下模型:

class UserProfile(models.Model):  
    user = models.ForeignKey(settings.AUTH_USER_MODEL, unique=True, null=True, on_delete=models.SET_NULL)
    fullname = models.CharField(max_length=64, unique=False)
    company = models.ForeignKey(ClientList, blank=False, null=True, db_column='client', on_delete=models.SET_NULL)
    position = models.CharField(max_length=64, unique=False, blank=True, null=True)
    egroup = models.CharField(max_length=50, choices=EMP_GROUP_CHOICES)
    address1 = models.CharField(max_length=130, unique=False, blank=True, null=True)
    address2 = models.CharField(max_length=30, unique=False, blank=True, null=True)
    city = models.CharField(max_length=64, unique=False, blank=True, null=True)
    state = models.CharField(max_length=64, unique=False, blank=True, null=True)
    zipcode = models.CharField(max_length=15, unique=False, blank=True, null=True)
    phone = models.CharField(max_length=15, unique=False, blank=True, null=True)
    extension = models.CharField(max_length=15, unique=False, blank=True, null=True)
    hphone = models.CharField(max_length=15, unique=False, blank=True, null=True)
    mobile = models.CharField(max_length=15, unique=False, blank=True, null=True)
    fax = models.CharField(max_length=15, unique=False, blank=True, null=True)
    notes = models.TextField(max_length=2000, blank=True, null=True)
    email = models.EmailField()

    User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])


    def __str__(self):
        return u'%s' % self.fullname

    class Meta:
        ordering = ['fullname']

    class Admin: 
        pass

如何在模板中获取userprofile.id?

(注意:不太相关,但用户对象仍明确使用外键以保留“on_delete”参数)

1 个答案:

答案 0 :(得分:0)

要存储用户个人资料,建议使用OneToOneField代替ForeignKey unique=True。虽然它们是等价的。

将关系设置为OneToOneField后,您可以使用以下查询检索userprofile ID:user.userprofile.id

如果您决定将ForeignKeyunique=True一起使用,您仍然可以使用以下查询集检索它:user.userprofile_set.first()

参考:https://docs.djangoproject.com/en/dev/topics/auth/customizing/#extending-the-existing-user-model