Python中Django框架与Python变量名末尾下划线冲突问题如何解决
在 Python 中,有些变量名已经存在内置的方法了,比如id, type等. Python 推荐的做法是在后面加一个下划线,比如id_, type_这样来避免覆盖内置方法.然而 Django 的 ORM 中会强制检查,禁止字段名末尾使用下划线......
这样的话,应该如何解决好一点呢......
Python中Django框架与Python变量名末尾下划线冲突问题如何解决
4 回复
后面再加一个字母……
这个问题在Django里挺常见的,主要是Django的ORM字段名和Python关键字或者内置函数名冲突了。比如你想给模型加个class字段,但class是Python关键字,直接写会报语法错误。
Django官方给的解决方案就是在字段定义里加个db_column参数,让数据库里的列名和Python里的属性名分开。看下面这个例子就明白了:
from django.db import models
class Student(models.Model):
# 这里属性名用 class_,但数据库里存的列名是 class
class_ = models.CharField(max_length=50, db_column='class')
name = models.CharField(max_length=100)
def __str__(self):
return f"{self.name} - {self.class_}"
这么干有几个好处:
- 代码里你可以用
student.class_来访问,读起来很自然 - 数据库里列名还是
class,跟你原来的设计保持一致 - 做查询的时候,Django会自动处理好这个映射关系
如果你已经在用这个模型了,记得生成并运行迁移:
python manage.py makemigrations
python manage.py migrate
总结一下,用db_column参数就能干净利落地解决命名冲突。
xx_id
xx_type
然后这样在 orm 中操作就变成了 xxx.xxx_id, xxx.xxx_type 这样了…

