Django - User对象的所有属性?

时间:2014-01-05 18:22:47

标签: python django django-models django-views django-users

我正在阅读一本名为“Packt Publishing,使用Django学习网站开发”的书,我正在做一个关于如何创建书签网站的教程,用户可以在其中阅读文章并将其加入书签/将文件保存到文章中。这是models.py

from django.db import models
from django.contrib.auth.models import User
# Create your models here.

class Link(models.Model):
    url = models.URLField(unique=True)

class Bookmark(models.Model):
    title = models.CharField(max_length=200)
    user = models.ForeignKey(User)
    link = models.ForeignKey(Link)

现在,这是我的user_page视图(用户名作为参数传递给视图)

def user_page(request, username):
    try:
        user = User.objects.get(uesrname=username)
    except:
        raise Http404('Requested user not found.')

    bookmarks = user.bookmark_set.all()
    variables = {
        'username': username,
        'bookmarks': bookmarks
    }

    return render(request, 'user_page.html', variables)

我对这条线感到困惑

bookmarks = user.bookmark_set.all()

我理解“用户”是一个用户对象,但我们使用的是Django提供的通用用户模型,它只有用户名,密码和电子邮件,对吗?那么bookmark_set来自哪里?因为如果它试图从书签类中访问所有书签,那么bookmark_set中的'b'不应该是大写的吗? _set做了什么?在书中,它通过说

解释了这一行

“要获取特定用户对象的书签列表,我们可以 方便地使用用户对象“

中可用的bookmark_set属性

我尝试谷歌用户对象的所有可用属性但找不到任何东西。是否有一个网站,其中包含用户对象可用的所有属性的列表?

3 个答案:

答案 0 :(得分:1)

bookmark_set来自Bookmark定义,更具体地来自行

user = models.ForeignKey(User)

此行为Bookmark模型创建用户属性,但alsobookamrk_set模型添加User属性!

django documentation对此进行了解释。为了完整起见,我正在复制文档:

  

Django还为关系的“其他”方创建API访问器 - 从相关模型到定义关系的模型的链接。例如,Blog对象b可以通过entry_set属性访问所有相关Entry对象的列表:b.entry_set.all()。

答案 1 :(得分:1)

bookmark_setForeignKey的反向/“另一面”。您有BookmarkUser的FK,因此Django会自动在用户上生成bookmark_set

另见官方Django文档:Following relationsips "backward"

答案 2 :(得分:1)

你应该完成Django教程,解释了这一点。

bookmark_set是在Bookmark中定义并指向User的ForeignKey的反向关系。 Django中的每个外键都有这个反向访问器,在这种情况下,它会为您提供与您拥有的特定用户对象相关的所有书签。