嘿,Django的小伙伴们!今天咱们来唠点硬核但超级实用的——Django的数据库查询接口。我知道,很多新手(甚至一些老手)一碰到数据库操作,就习惯性地祭出 MyModel.objects.all() 这把“万能钥匙”,然后交给Python在内存里吭哧吭哧地过滤、循环。
打住!兄弟,你的数据库引擎可是经过千锤百炼的优化神器,你让它沦落成一个简单的数据存储罐,这简直是杀鸡用牛刀,不,是用光剑切菜!
今天,我就带你深入Django ORM(对象关系映射)的腹地,看看它为我们准备了哪些好用又高效的“神兵利器”。准备好了吗?系好安全带,咱们发车了!
第一章:舞台搭建——我们的示例模型
光说不练假把式,咱们先搭个简单的博客系统模型,方便后面演示。
# models.py
from django.db import models
from django.contrib.auth.models import User
class Category(models.Model):
name = models.CharField(max_length=100)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
class Post(models.Model):
STATUS_CHOICES = (
('draft', '草稿'),
('published', '已发布'),
)
title = models.CharField(max_length=200)
body = models.TextField()
status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='posts')
category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='posts')
views = models.PositiveIntegerField(default=0) # 阅读量
published_at = models.DateTimeField(null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
class Tag(models.Model):
name = models.CharField(max_length=50)
posts = models.ManyToManyField(Post, related_name='tags')
def __str__(self):
return self.name
模型很简单:User(Django自带的)、Category(文章分类)、Post(文章)、Tag(标签)。关系也很清晰:一篇文章属于一个用户和一个分类,同时可以拥有多个标签。
第二章:初出茅庐——基础查询操作(管理器Objects)
Django为每个模型都标配了一个叫 objects 的管理器(Manager),它就是咱们通往数据库的大门。

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



