美文网首页
values(),values_list() flat

values(),values_list() flat

作者: 叶田的学习笔记 | 来源:发表于2018-10-20 13:07 被阅读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()返回值的类型是字典
    
        # ① 句,对所有相似文章,根据当前文章相同的标签数量进行标注,然后以相同标签数量和文章发布时间为关键词排序,倒序
    

    相关文章

      网友评论

          本文标题:values(),values_list() flat

          本文链接:https://www.haomeiwen.com/subject/zizpzftx.html