values(),values_list() flat

2018-10-20  本文已影响0人  叶田的学习笔记

values(),values_list() 都是得到当前对象的所有字段或者指定字段的值。

官方文档说明:
https://docs.djangoproject.com/en/2.1/ref/models/querysets/#values-list

values()

# This list contains a Blog object.
>>> Blog.objects.filter(name__startswith='Beatles')
<QuerySet [<Blog: Beatles Blog>]>
# This list contains a dictionary.
>>> Blog.objects.filter(name__startswith='Beatles').values()
<QuerySet [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]>
>>> Blog.objects.values()
<QuerySet [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]>
>>> Blog.objects.values('id', 'name')
<QuerySet [{'id': 1, 'name': 'Beatles Blog'}]>


values_list()

>>> Entry.objects.values_list('id').order_by('id')
<QuerySet[(1,), (2,), (3,), ...]>

>>> Entry.objects.values_list('id', flat=True).order_by('id')
<QuerySet [1, 2, 3, ...]>

举例:推荐根据tag相似的文章

    from django.db.models import Count

    article_tags_ids = article.article_tag.values_list('id',flat=True)
    similar_articles = ArticlePost.objects.filter(article_tag__in=article_tags_ids).exclude(id=article.id)   # 将当前文章清除
    similar_articles = similar_articles.annotate(same_tags=Count('article_tag')).order_by('-same_tags','-created')[:4]   # ①

    # ArticlePost 与 ArticleTag 多对多关系
    # values_list(),返回值的类型是列表,如果不声明flat=True,列表是由元组组成
    # values()返回值的类型是字典

    # ① 句,对所有相似文章,根据当前文章相同的标签数量进行标注,然后以相同标签数量和文章发布时间为关键词排序,倒序
上一篇下一篇

猜你喜欢

热点阅读