【问题标题】:Django - all attributes for the User object?Django - 用户对象的所有属性?
【发布时间】:2014-01-23 02:43:40
【问题描述】:

我正在阅读一本名为“Packt Publishing, Learning Website Development with Django”的书,我正在做一个关于如何创建书签网站的教程,用户可以在其中阅读文章并将它们加入书签/保存文章的 URL。这是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 是从哪里来的呢?因为如果它试图访问书签类中的所有书签,那么书签集中的“b”至少不应该是大写的吗? _set 是做什么的?在书中,它通过说来解释这一行

"要获取特定用户对象的书签列表,我们可以 方便地使用用户对象中可用的 bookmark_set 属性"

我尝试用谷歌搜索用户对象的所有可用属性,但找不到任何东西。是否有一个网站列出了用户对象的所有可用属性?

【问题讨论】:

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


    【解决方案1】:

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

    user = models.ForeignKey(User)

    这一行为Bookmark 模型创建了一个用户属性,但alsoUser 模型添加了一个bookamrk_set 属性!

    这在django documentation 中有解释。为了完整起见,我从文档中复制:

    Django 还为关系的“另一端”创建 API 访问器——从相关模型到定义关系的模型的链接。例如,博客对象 b 可以通过 entry_set 属性访问所有相关条目对象的列表:b.entry_set.all()。

    【讨论】:

      【解决方案2】:

      bookmark_setForeignKey 的反面/“另一面”。你有一个从BookmarkUser 的FK,所以Django 会自动在用户上生成一个bookmark_set

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

      【讨论】:

        【解决方案3】:

        您应该已经完成​​了 Django 教程,其中对此进行了解释。

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

        【讨论】:

          猜你喜欢
          • 2020-03-10
          • 2011-12-14
          • 2018-08-09
          • 1970-01-01
          • 2020-01-12
          • 2019-06-23
          • 2016-02-02
          • 2018-02-15
          • 2018-12-28
          相关资源
          最近更新 更多