select_related在查询时返回值None

时间:2019-05-27 01:09:27

标签: python django

我正在尝试获取模型name的{​​{1}}字段,但它返回None。我可以通过运行Category来确认有一个值。 返回

  

QuerySet [{'id':3,'name':'Tasks'}]>

型号:

print(post.categories.values())

查看:

from django.db import models

class Category(models.Model):
    name = models.CharField(max_length=30)

class Post(models.Model):
    title = models.SlugField(max_length = 250, null = True, blank = True)
    body = models.TextField()
    created_on = models.DateTimeField(null=True)
    last_modified = models.DateTimeField(null=True)
    categories = models.ManyToManyField('Category', related_name='posts')

class Comment(models.Model):
    author = models.CharField(max_length=60)
    body = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)
    post = models.ForeignKey('Post', on_delete=models.CASCADE)

1 个答案:

答案 0 :(得分:0)

select_related只是性能提升器,它遵循外键关系。如果您在Post对象中没有models.Foreignkey,那么这根本就没有做任何优化。

您在帖子和类别之间使用models.ManyToManyField,这意味着您可以在一个帖子中使用多个类别。要获取类别名称,您应该遍历post.categories列表

print([category.name for category in post.categories.all()])

如果您想知道与prefetch_related的这种类型的关系是否有优化