0x05、由于相对/绝对路径写错导致
字段 | 详细描述 |
---|---|
位置 | apps.users.models.BaseModel(类) |
异常描述 | RuntimeError: Model class apps.courses.models.Course doesn’t declare an explicit app_label and isn’t in an application in INSTALLED_APPS. |
解决方法 | 修改其他app的models引用其他app的model的写法,即这个错误由于导入model的时候,写错相对/绝对路径而引起的,==最坑的是,pycharm不给你报错,而显示是正常导入的模块== |
报错代码:
1 | RuntimeError: Model class apps.courses.models.Course doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS. |
解决方法如下:
正确解决方法:
为什么是这样引用呢?
大概是因为,你在项目的settings.py中已经install了这个users的app,所以django知道这个users的app在哪里,所以引用的时候就不再需要带上前缀apps.也能正确使用(可能说的不准,仅供参考,欢迎各位指正)
0x06、用于外键未正确设置导致的错误
字段 | 详细描述 |
---|---|
位置 | MxOnline\apps\operations\models.py |
异常描述 |
TypeError: init() missing 1 required positional argument: ‘on_delete’
解决方法 | 将涉及到外键的地方做相对应的修改,必须加上on_delete这个参数,这个参数表名,如果主键的数据删除了,那么外键的数据应该怎么办,这时候可以考虑是否级联删除或者设置为空字段等等,需要具体情况具体分析
1 | # 增加on_delete=models.CASCADE即可 |
0x07、注册apps后才能在后台管理系统看得到,及如何修改注册之后app的显示名字为中文(admin/xadmin开发的)
例如:编写了models之后,是需要再admin/adminx里面添加注册APP的信息,如果不添加,就在后台管理系统看不到的
不注册course app
代码adminx里面未注册course
将adminx代码里面的注释去掉之后,即可注册course app
修改注册的COURSE这个app显示的名字
重启django、Ctrl+F5刷新即可看到效果:
0x08、如何修改添加某个city之后,提示的描述符不为“xxx object”的情况
代码实现,在对应的model里面,重新定义返回的
def __str__(self):return self.name
这个方法,指定返回是name字段修改之后结果:
0x09、如何指定显示、搜索、过滤、编辑指定的字段/列
- 如何显示、搜索、过滤、编辑指定的列:
- 可以通过增加下面代实现(在adminx/admin中添加):
1 | class CityAdmin(object): |
修改代码之后,结果如下:
再来一个玩法:
如果需要也==过滤model里面的外键==的话,是通过这样的方式来使用:
1 | class CourseAdmin(object): |
其中teacher字段就是外键,Django里面设置外键有点像是引用整个model字段,然后使用这个model指定name字段来作过滤/搜索.
感谢认真读完这篇教程的您
先别走呗,这里有可能有你需要的系列文章: