【问题标题】:Accessing data from Django model从 Django 模型访问数据
【发布时间】:2013-03-29 01:29:13
【问题描述】:

假设我有一个这样定义的模型

class BlogPost(Models.Model):
    """ Defines a blog model """
    blog    = models.TextField()
    blog_id = models.AutoField(primary_key=True)
    author  = models.CharField()

我想定义一些方法来访问某个作者的博客文章,比如“john doe”。我将如何定义一种方法来访问 john doe 拥有的所有博客文章,然后将他们的 blog_id 放入 python 列表中?

def selectPostsByUser(user):
""" Implement function to select all object """

注意:请忽略数据字段的不良表示。它们纯粹是任意的,我只是在示例中添加名称以消除歧义。

【问题讨论】:

    标签: django django-models django-database


    【解决方案1】:

    我希望你的模型中有一个用户外键:

    def selectPostsByUser(user):
        return self.objects.filter(user__id=user.id).values_list('blog_id', flat=True)
    

    如果您传递给selectPostsByUser 方法的用户是作者(和用户模型对象)。那么您应该在模型中将作者作为 ForiegnKey 字段。

    【讨论】:

    • yes __ 是故意的,这就是字段查找的工作方式。见here
    【解决方案2】:

    models.py

    class BlogPost(Models.Model):
        """ Defines a blog model """
        blog    = models.TextField()
        blog_id = models.AutoField(primary_key=True)
        author  = models.CharField()
    
        @classmethod
        def selectPostsByUser(cls, user):
            return cls.objects.filter(author=user)
    

    views.py

    user = "john doe"
    blogs = BlogPost.selectPostsByUser(user)
    

    【讨论】:

      【解决方案3】:

      您的author 字段应该是ForeignKey,而不是CharField。这就是您在 Django 中表示关系的方式。

      然后,Django 允许您检索与用户关联的帖子对象:user.blog_set.all()。从那里提取 ID 很简单。

      另外,Django automatically provides an id field for objects,你不需要定义自己的 blog_id 字段。


      关注the Django "polls" tutorial 应该会为您提供构建应用所需的所有工具。

      【讨论】:

        【解决方案4】:

        直接回答这个问题,假设作者其实是一个'CharField'。您可以执行以下操作以从“jane doe”获取所有博客文章,然后将所有 ID 放入列表中......

        posts = BlogPost.objects.filter(author='jane doe')
        list = []
        for items in posts:
            lists.append(items.blog_id)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-23
          • 1970-01-01
          • 2022-01-15
          • 2020-06-06
          • 1970-01-01
          • 2012-02-13
          • 2014-04-19
          • 2013-10-15
          相关资源
          最近更新 更多