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 就是您需要的!
假设这是我的 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 就是您需要的!