避免常见的 Django 错误——QuerySet 评估、N+1 查询、迁移冲突和 ORM 陷阱。
Topic.是一项面向实际任务的技能,主要用于QuerySet 懒惰 eval, N+1, 交易 . orm. md. 请求处理, 中间软件, 上下文. views. md.;Validation, CSRF, 文件上传. forms. md. migrations, igunder, managements. models. md。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;
涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
| 主题 | 文件 |
|---|---|
| QuerySet 懒加载、N+1 问题、事务 | orm.md |
| 请求处理、中间件、上下文 | views.md |
| 验证、CSRF、文件上传 | forms.md |
| 迁移、信号、管理器 | models.md |
| XSS、CSRF、SQL 注入、认证 | security.md |
| 异步视图、异步环境下的 ORM、Channels | async.md |
list() 缓存结果select_related,对 ManyToMany 关系使用 prefetch_related;否则将引发 N+1 查询问题update() 跳过 save() 流程 —— 不触发信号,也不会更新 auto_now 字段F() 实现原子更新 —— 例如 F('count') + 1 可避免竞态条件get() 在对象不存在或存在多个时分别抛出 DoesNotExist 或 MultipleObjectsReturned 异常 —— 如需安全获取,应使用 filter().first()DEBUG=False 时必须配置 ALLOWED_HOSTS —— 否则返回 400 Bad Request{% csrf_token %} —— 否则 POST 请求将返回 403 Forbiddenauto_now 字段无法被手动覆盖 —— 如需支持手动设置,请改用 default=timezone.nowexclude(field=None) 排除的是值为 NULL 的记录 —— 若需显式筛选 NULL,请使用 filter(field__isnull=True)ForeignKey('app.Model')transaction.atomic() 不会捕获异常 —— 错误仍会向上抛出sync_to_async 包装 —— ORM 本身仅支持同步操作