在查询过程中检索记录的属性列表

问题描述 投票:0回答:2

我有模型表所以标签和文章,

class Tag(models.Model):
    owner = models.ForeignKey(User,on_delete=models.CASCADE)
    name = models.CharField(max_length=50)
    ...
class Article(models.Model):
    tags = models.ManyToManyField(Tag, blank=True)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    ...

我打算检索指定文章的标签并将它们转换为字符串:

1,获取最新文章:

In [26]: articles = Article.objects.all()
In [27]: len(articles)
Out[27]: 41
In [29]: a = articles[40]
In [30]: a 
Out[30]: <Article: Test new tags>

2,得到它的标签queryset

In [32]: tags = a.tags.all()
In [32]: tags
Out[32]: <QuerySet [<Tag: python>, <Tag: django>, <Tag: git>, <Tag: javascript>]>

3,将queryset转换为字符串集

In [36]: str_tags = ",".join([tag.name for tag in tags])
In [36]: str_tags   
Out[36]: 'python,django,git,javascript'

我可以通过查询直接获得str_tags吗?

django
2个回答
2
投票

你可以使用values_list('name', flat=True)

tag_names = ",".join(a.tags.values_list('name', flat=True))

麻生最后一篇文章只使用last()

a = Article.objects.last()

0
投票

而不是做两个查询你可以定义这样的东西,因为它的M2M字段ArticleTag = Article.tags.through,那么你可以查询像tags = ArticleTag.objects.filter(article_id = id)然后你可以做str_tags =“,” .join([tag.name for tags in tags])

© www.soinside.com 2019 - 2024. All rights reserved.