Django模型方法调用与参数重写:移除person参数及相关逻辑
解决方案
1. 修改模型的complete方法
首先调整Mymodel中的方法,移除person参数和对应的关联逻辑,同时修正字段拼写错误(model.BooleanField应为models.BooleanField):
class Mymodel(models.Model): is_done = models.BooleanField(default=False) # 建议添加default避免初始值异常 def complete(self): self.is_done = True self.save(update_fields=['is_done'])
2. 调整视图中的调用逻辑
complete是实例方法,必须通过具体的Mymodel对象调用,不能直接用类名调用。根据视图类型获取目标实例后,再执行方法:
from django.shortcuts import get_object_or_404 class MyView(SomeView): def complete_record(self): # 方式1:如果是基于单对象的视图(如DetailView),直接获取当前对象 my_model_instance = self.get_object() # 方式2:如果需要通过主键/其他条件查询,用get_object_or_404 # record_id = self.kwargs.get('pk') # my_model_instance = get_object_or_404(Mymodel, pk=record_id) my_model_instance.complete() # 根据业务需求返回响应,比如重定向或JSON响应 return redirect('your-target-url-name')
关键说明
- 实例方法依赖具体对象的状态,必须先拿到
Mymodel的实例才能调用complete,不能直接用Mymodel.complete()(这是类方法的调用方式) - 移除
person参数后,方法逻辑只保留标记任务完成并更新字段的核心功能
内容的提问来源于stack exchange,提问作者mikan
相关产品推荐
相关产品推荐

