簡體   English   中英

在查詢過程中檢索記錄的屬性列表

[英]Retrieve the attribute list of records during querying process

我有模型表,所以標簽和文章,

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嗎?

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

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

麻生太郎要獲取上一篇文章,只需使用last()

a = Article.objects.last()

無需進行兩次查詢,您可以定義一個類似的東西,因為它的M2M字段ArticleTag = Article.tags.through ,然后可以像標簽= ArticleTag.objects.filter(article_id = id)進行查詢,然后可以執行str_tags =“,” .join([標簽中標簽的tag.name])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM