我有模型表,所以标签和文章,
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吗?
答案 0 :(得分:2)
您可以使用values_list('name', flat=True)
:
tag_names = ",".join(a.tags.values_list('name', flat=True))
要获得上一篇文章,只需使用last()
:
a = Article.objects.last()
答案 1 :(得分:0)
您无需定义两个查询,而是可以定义如下内容,因为其M2M字段 ArticleTag = Article.tags.through , 那么您可以查询 tags = ArticleTag.objects.filter(article_id = id) 那么您可以执行 str_tags =“,”。join([标签中标签的标签名称])