django中用户表的外键

时间:2010-07-06 05:40:49

标签: python django sqlite

我正在使用django的内置contrib.auth模块,并且在添加“帖子”时为用户设置了外键关系:

class Post(models.Model):
    owner = models.ForeignKey('User')
    # ... etc.

现在,在实际添加Post时,我不确定在调用save()之前在owner字段中提供什么。我期望用户的会话中有一个像id的东西,但我注意到User没有user_id或id属性。我应该从用户的经过身份验证的会话中提取哪些数据来填充所有者字段?我试图看看数据库表中发生了什么,但还没有太多关于sqlite设置。

感谢您的帮助......

2 个答案:

答案 0 :(得分:4)

您想提供“用户”对象。即你可以从User.objects.get得到同样的东西(pk = 13)。

如果您正在使用Django的身份验证组件,则该用户也会附加到请求对象,您可以直接在视图代码中使用它:

request.user

如果用户未经过身份验证,则Django将返回django.contrib.auth.models.AnonymousUser的实例。 (按http://docs.djangoproject.com/en/dev/ref/request-response/#attributes

答案 1 :(得分:1)

要求-> Django 3,python 3

1)要将用户名添加到owner = models.ForeignKey('User')进行保存,在第一步中,您必须在from django.conf import settings上方添加models.py并将owner = models.ForeignKey('User')编辑为该示例:

class Post(models.Model):
    slug = models.SlugField(max_length=100, unique=True, null=True, allow_unicode=True)
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, default=1, on_delete=models.CASCADE)

2),要查看帖子中的显示详细信息Post,特殊所有者名称或家庭或用户名,您必须在第二步中添加以下代码在views.py中:

from django.shortcuts import get_object_or_404
.
.
. 

def detailPost(request,slug=None):
    instance = get_object_or_404(Post, slug=slug)
    context = {
        'instance': instance,
    }
return render(request, template_name='detail_post.html', context=context)

3),并且在第三步中,您必须添加以下代码以显示用户信息,例如创建帖子的用户全名:

<p class="font-small grey-text">Auther: {{ instance.owner.get_full_name  }} </p>

现在,如果您想使用用户名,则可以使用{{ instance.owner.get_username }} 或者,如果您想访问短名,则可以使用{{ instance.owner.get_short_name }}。 有关更多信息,请参见this link