python - django model是用get还filter
问题描述
如下面代码,会根据实例ID获取实例对象,大家知道get的时候如果id不存在会出现异常,但是filter不会。那么,请问大家,像类似这种情况是用get然后处理异常要好呢,还是filter来做好呢,哪种更规范?
def get_city_image(self, instance):if instance.city_id: try:city_image = City.objects.get(id=instance.city_id).image.url# city_image = City.objects.filter(id=instance.city_id).last().image.url except Exception, e:city_image = Noneelse: city_image = Nonereturn city_image
问题解答
回答1:def get_city_image(self, instance): try:city_image = City.objects.get(id=instance.city_id).image.url except City.DoesNotExist:#捕获City不存在的异常, 抛出异常或是自己处理city_image = None return city_image回答2:
框架选择设计问题,django 是扔异常,别的框架直接返回None,看你喜欢那种,我不喜欢这种直接扔异常,直接补一个自己的方法就行了
参考链接: django 扩展/补丁 QuerySet
回答3:用filter.first 效率是一样的,并且不会抛异常
相关文章:
1. javascript - 天猫首页首屏数据来源2. mysql - 仅仅只是把单引号与反斜杠转义不用prepare statement能否避免sql注入?3. macOS Sierra 10.12 安装mysql 5.7.1出现错误4. 新入手layuiadmin,部署到tp中。想用php自已写一个后台管理系统。5. javascript - 按钮链接到另一个网址 怎么通过百度统计计算按钮的点击数量6. mysql在限制条件下筛选某列数据相同的值7. php - 生产环境下,给MySQL添加索引,修改表结构操作,如何才能让线上业务不受影响?8. mysql - 拖拽重排序后怎么插入数据库?9. javascript - 微信小程序 wx.downloadFile下载文件大小有限制吗10. mysql 获取时间函数unix_timestamp 问题?
