django踩坑记录(2)

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不给你报错,而显示是正常导入的模块
报错代码:
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这个参数,这个参数表名,如果主键的数据删除了,那么外键的数据应该怎么办,这时候可以考虑是否级联删除或者设置为空字段等等,需要具体情况具体分析

# 增加on_delete=models.CASCADE即可
user = models.ForeignKey(UserProfile, verbose_name="用户", on_delete=models.CASCADE)
0x07、注册apps后才能在后台管理系统看得到,及如何修改注册之后app的显示名字为中文(admin/xadmin开发的)

例如:编写了models之后,是需要再admin/adminx里面添加注册APP的信息,如果不添加,就在后台管理系统看不到的

  1. 不注册course app
    没有course的app

  2. 代码adminx里面未注册course
    不注册app情况

  3. 将adminx代码里面的注释去掉之后,即可注册course app
    注册之后app显示情况

  4. 修改注册的COURSE这个app显示的名字
    增加这一行即可修改默认显示的app名字

重启django、Ctrl+F5刷新即可看到效果:
修改COURSE app显示名字

0x08、如何修改添加某个city之后,提示的描述符不为“xxx object”的情况

修改添加之后显示object的字符

  1. 代码实现,在对应的model里面,重新定义返回的def __str__(self):return self.name这个方法,指定返回是name字段
    去掉显示object字符

  2. 修改之后结果:

修改之后正常显示city的名字

0x09、如何指定显示、搜索、过滤、编辑指定的字段/列
  1. 如何显示、搜索、过滤、编辑指定的列:
    如何搜索指定过滤搜索指定的列

  2. 可以通过增加下面代实现(在adminx/admin中添加):

class CityAdmin(object):
    list_display = ["id", "name", "desc", "add_time"]  # 指定显示某些列/字段
    search_fields = ["name", "desc", "add_time"]  # 指定搜索的字段/列
    list_filter = ["name", "desc", "add_time"]  # 指定可以选择过滤的字段/列
    list_editable = ["name", "desc"]  # 指定可以在列表那里就能修改的字段(方便修改,不用点进去也能编辑那种)

如何搜索指定过滤搜索编辑指定的列

修改代码之后,结果如下:
指定显示搜索过滤编辑的列

再来一个玩法:

如果需要也过滤model里面的外键的话,是通过这样的方式来使用:

class CourseAdmin(object):
    list_display = ["name", "desc", "detail", "degree", "learn_times", "students"]
    search_fields = ["name", "desc", "detail", "degree", "students"]
    list_filter = ["name", "teacher__name", "desc", "detail", "learn_times", "degree", "students"]  # 外键可以通过"course__name"这种添加双下划线,然后指定某个字段来设置过滤
    list_editable = ["degree", "desc"]

其中teacher字段就是外键,Django里面设置外键有点像是引用整个model字段,然后使用这个model指定name字段来作过滤/搜索.

感谢认真读完这篇教程的您

先别走呗,这里有可能有你需要的系列文章:

1、Django踩坑记录系列
2、或者点击我的个人博客进行查看这系列文章

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值