【问题标题】:Django Optimal Way of Getting a List of Model AttributesDjango获取模型属性列表的最佳方式
【发布时间】:2022-01-23 23:32:47
【问题描述】:

假设这是我的models.py 文件:

class Paper(models.Model):
  title = models.CharField(max_length=20, null=False, blank=False)


class Author(models.Model):
  user = models.ForeignKey(User, on_delete=models.CASCADE)
  papers = models.ManyToManyField(Paper, null=False, blank=False)

一个作者可以有多篇论文,一篇论文可以有多个作者。我需要获取给定作者的所有论文标题。

在我的views.py 中,一旦我有了作者对象,我需要得到一个包含他所有论文标题的列表。我正在这样做:

user = User.objects.get(username=request.user)
author = Author.objects.get(user=user)
papers = [paper.title for paper in author.papers.all()]

在 Django 中有没有一种方法可以在不必遍历作者论文的情况下进行此查询?也许有一个内置函数或我缺少的东西,有什么建议吗?

【问题讨论】:

    标签: python django django-models django-views


    【解决方案1】:

    应该够了

    papers_by_author = Author.objects.filter(
        user__username=request.user
        ).values('papers__title')
    

    除此之外,如果您在代码中使用prefetch_related。你会有一些速度。

     Author.objects.get(user=user).prefetch_related('papers')
    

    【讨论】:

      【解决方案2】:

      您还可以获取某个作者的所有论文 例如,在您的代码中获取作者:

      author = Author.objects.get(user=user)
      

      然后得到这位作者的所有论文:

      author.papers.values_list("title", flat=True)
      

      结果是一个只有标题值的列表。

      总而言之,flat=True 的 values_list() 就是你需要的!

      【讨论】:

        猜你喜欢
        • 2018-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-05
        • 2015-05-27
        • 1970-01-01
        • 2015-11-08
        相关资源
        最近更新 更多