Django模型自定义unpublish方法调用后未修改数据库状态
问题修复方案
你的代码存在两处核心逻辑错误,导致字段未更新,修复方式如下:
核心错误点
- 模型方法赋值逻辑错误
unpublish方法中你使用了==相等判断运算符,不会修改published属性值,仅会返回布尔判断结果,需要替换为=赋值运算符。 - 视图方法未正确调用
最初视图中写的post.unpublish没有加括号,仅引用了方法对象,没有执行实际的方法逻辑,需要加括号完成调用post.unpublish()。
其余可优化问题
你最终版本的视图存在返回值错误:messages.warning是消息附加方法,不能直接作为响应返回,需要添加消息后统一返回重定向;路由中的slug参数缺少路径转换器声明,匹配规则不严谨。
修复后完整代码
模型方法修复
class Post(models.Model): title = models.CharField(max_length=200) author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True) published = models.BooleanField(default=False, null=True, blank=True) def unpublish(self): # 替换==为=完成赋值 self.published = False self.save()
视图代码修复
@require_http_methods(['POST', 'DELETE']) def unpublish_post(request, slug): post = get_object_or_404(Post, slug=slug) if post.published: post.unpublish() messages.success(request, "文章已成功取消发布") else: messages.warning(request, "Post already not published") # 统一返回重定向,不要直接返回messages对象 return redirect('dashboard')
路由规则修复
# 补充slug路径转换器,规范参数匹配 path('unpublish-post/<slug:slug>/', unpublish_post, name='unpublish-post'),
内容的提问来源于stack exchange,提问作者sam hassan
相关产品推荐
相关产品推荐

