Django调用latest()获取addPost数据提示匹配查询不存在错误如何解决
错误根因
latest()方法的默认行为就是查询集为空时直接抛出DoesNotExist异常,只要你的addPost数据库表中还没有任何帖子数据,调用就会触发该报错- 模型Meta配置的
get_latest_by参数格式错误,该参数仅需要传入字段名,不需要加排序负号-,加负号会导致排序逻辑异常,甚至无法正确匹配字段
修复方案
第一步:修正模型配置
修改models.py中的Meta类配置:
class addPost(models.Model): # 原有字段保持不变 class Meta: get_latest_by = "date"
如果不想修改Meta配置,也可以在调用latest()时显式指定排序字段:addPost.objects.latest('date')
第二步:兼容空表场景
可以选择两种处理方式规避空表报错:
- 改用
last()方法,空表时会返回None而不抛异常,代码示例:
def index(request): obj = addPost.objects.order_by('-date').last() if obj: print(obj.postId) else: # 自行定义无数据时的处理逻辑 print("暂无发布的帖子")
- 捕获
latest()的专属异常:
def index(request): try: obj = addPost.objects.latest() print(obj.postId) except addPost.DoesNotExist: # 自行定义无数据时的处理逻辑 print("暂无发布的帖子")
内容的提问来源于stack exchange,提问作者Tariq Ahmed
相关产品推荐
相关产品推荐

