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

Posted

技术标签:

【中文标题】Django获取模型属性列表的最佳方式【英文标题】:Django Optimal Way of Getting a List of Model Attributes 【发布时间】: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 中有没有一种方法可以在不必遍历作者论文的情况下进行此查询?也许有一个内置函数或我缺少的东西,有什么建议吗?

【问题讨论】:

【参考方案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() 就是你需要的!

【讨论】:

以上是关于Django获取模型属性列表的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章

Django:从 HTML 中获取 LIST 数据,无需表单或模型

Graphql Django 获取嵌套对象属性的最佳方法

如何从 Django QuerySet 中获取绝对图像 URL 列表?

Django - 如何以有效的方式获取最新的相关模型,我可以在模板上进行迭代?

在 Django 中为多个查询编写视图的最佳方法?

Django:获取模型字段列表?