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 数据,无需表单或模型
如何从 Django QuerySet 中获取绝对图像 URL 列表?