Django 获取模型属性列表的最佳方式

Django Optimal Way of Getting a List of Model Attributes

假设这是我的 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 中,一旦我有了一位作者 object,我需要得到一个包含他所有论文标题的列表。我正在这样做:

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

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

这应该够了

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

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

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

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

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

然后获取该作者的所有论文:

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

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

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