Django 将数据输出到html后,怎么用?(QuerySet 和Set的区别?)

往html输出的数据大部分是字典。字典的值有很多都是QuerySet。
既然这样,我们首先应该认识认识Queryset。

"""
QuerySet is parametrized with model object
"""
class QuerySet(object):
    def __init__(self, model=None, query=None, using=None, hints=None):
        """
        :rtype: django.db.models.query.QuerySet[T]
        """
        pass

    def __iter__(self):
        """

        :rtype: collections.Iterator[T]
        """
        pass
class Set(set, MutableSet[T], extra=set):

    def __new__(cls, *args, **kwds):
        if _geqv(cls, Set):
            raise TypeError("Type Set cannot be instantiated; "
                            "use set() instead")
        return set.__new__(cls, *args, **kwds)

从QuerySet 和 Set 源代码可以看到,QuerySet并不是Set类型的子类。所以可以说二者没有任何关系。那QuerySet到底是神马? 继续往下看。。。

Query_百度百科
Query,是查询的意思,为了在数据库中寻找某一特定文件、网站、记录或一系列记录,由搜索引擎或数据库送出的消息。简介英文缩写:Query查询命令命令: query use…

QuerySet就是查询集,查询集对应的是SQL的Select…from…where…语句查询出来元组。也可以这么说,QuerySet = 元组+ORM技术。使得可以用对象来操作数据库。(个人理解是这样。不恰当的地方,劳烦大家指出来,不胜荣幸。)

Set就是数学里的集合,集合有什么特点,set就有什么特点。集合有无序性,set也有;集合有唯一性,set也有。

看吧,QuerySet和Set其实并没有多大关系。有的是他俩确实有很多共同特征(唯一性,无序性)。

QuerySet 如何使用? 遍历一下就行了。

  1. QuerySet是查询集,{对象1,对象2,对象3,对象4,,,,对象n}
  2. QuerySet = 元组 + ORM技术
    使用方法:
    从QuerySet中获取对象可以通过for in 的形式遍历,之后通过对象获取对象的具体值。
    # 这是在py中使用
    categorys = Category.objects.filter(name__isnull=False)
    args=dict()
    for categ in categorys:
        args[categ.name]=get_sorted_posts(categ)
        # 这是在py中的使用方法。在html中类似,不过得用{%%}括起来,以证明这是python语句。
# 把'args':args['blogpostss'],传给html。
# args['blogpostss'] = BlogPost.objects.exclude(title__in=exclude_posts)
def home(request, page=''):
    args = dict()
    # include 包括  exclude 不包括
    args['blogpostss'] = BlogPost.objects.exclude(title__in=exclude_posts)
    max_page = ceil(len(args['blogpostss']) / 3)
    if page and int(page) < 2:  # /0, /1 -> /
        return redirect("/")
    else:
        page = int(page) if (page and int(page) > 0) else 1
        args['page'] = page
        args['prev_page'] = page + 1 if page < max_page else None
        args['newer_page'] = page - 1 if page > 1 else None
        args['sl'] = str(3 * (page - 1)) + ':' + str(3 * (page - 1) + 3)
    # 用来展示分类信息
    categorys = Category.objects.filter(name__isnull=False)
    cont ={
        'args':args['blogpostss'],
        'categorys':categorys,
    }
    return render(request, 'blog/index.html', cont)
# 这是html使用queryset。
{% for blogpost in args|slice:":3"  %}
                           <!--这里用来显示标题    点击阅读更多-->
                           <a href="{{ blogpost.get_absolute_url }}">
                           {{ blogpost.title }}</a>
                      {{ blogpost.pub_date|date:'M' }} 
                         {{blogpost.views}}
{% endfor %}
Django中,处理一对多(Many-to-Many)关系的新建和更新通常涉及到两个模型之间的关联表。例如,如果你有两个模型`Author`和`Book`,作者可以有多本书,书也可以有多个作者,这就是一对多关系。以下是使用`QuerySet`在Django中进行操作的一般步骤: 1. **新建数据**: - 要添加一个新的作者及其关联的书籍,你可以先创建作者实例,然后通过属性访问其`books`关联集合: ```python author = Author.objects.create(name="John Doe") book = Book(title="Book Title") # 将新书添加到作者的书籍列表 author.books.add(book) ``` - 或者,如果`Book`有一个反向引用(`author_set`): ```python book.authors.add(author) ``` 2. **更新数据**: - 如果你想更新一个作者已有的书籍,例如删除一本书或替换书籍列表,可以使用`remove()`或`clear()`方法: ```python # 删除某本书 author.books.remove(book) # 清空所有书籍 author.books.clear() # 或者添加新的书籍 author.books.add(Book(title="New Book")) ``` 3. **通过外键更新关联**: - 如果你想要更新书籍信息,并自动更新所有关联的作者,可以使用`save()`方法,因为它会触发数据库的级联更新规则: ```python book.title = "Renamed" book.save() # 这将会更新所有与book相关的author对象的title字段 ``` 记得在实际操作时,检查并处理可能出现的异常,比如试图删除最后一本书可能会导致错误。同时,确保你理解了你的数据模型结构以及它们之间的约束。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值