编辑功能。和添加一样! 唯一不同的就是, 需要编辑一个指定的 记录。
这就需要,在列表页面, 渲染编辑的时候,添加一个 id 值:
def memory_url(self, get_url_name, *args, **kwargs): ‘‘‘用于反向生成url, 并且携带,get请求的参数,跳转到下一个网页‘‘‘ name = "%s:%s" % (self.site.namespace, get_url_name) base_url = reverse(name, args=args, kwargs=kwargs) # 记录原搜索条件 if not self.request.GET: add_url = base_url else: param = self.request.GET.urlencode() # 获取到GET请求的,所有的参数。 ?page=1&age=20 new_query_dict = QueryDict(mutable=True) new_query_dict["_filter"] = param add_url = "%s?%s" % (base_url, new_query_dict.urlencode()) return add_url # 用于 跳转会原页面时,解析出 GET 请求的参数。并拼接 def memory_reverse(self, get_url_name, *args, **kwargs): name = "%s:%s" % (self.site.namespace, get_url_name) url = reverse(name, args=args, kwargs=kwargs) origin_params = self.request.GET.get("_filter") if origin_params: url = "%s?%s" % (url, origin_params) return url # 用于用户自定制, 是否显示编辑按钮 def display_edit(self, obj=None, is_header=None): ‘‘‘ 自定义页面,显示的列,(表头和内容) :param obj: 数据库中每一行记录的 model对象 :param is_header: 判断是否为表头 :return: ‘‘‘ if is_header: return "编辑表头" # name = "%s:%s" % (self.site.namespace, self.get_edit_url_name) # 拼接 stark:app01_userinfo_change return mark_safe("<a href=‘%s‘>编辑</a>" % self.memory_url(get_url_name=self.get_edit_url_name, pk=obj.pk)) # 用于用户自定制, 是否显示删除按钮 def display_del(self, obj=None, is_header=None): if is_header: return "删除表头" # name = "%s:%s" % (self.site.namespace, self.get_del_url_name) return mark_safe("<a href=‘%s‘>删除</a>" % self.memory_url(get_url_name=self.get_del_url_name, pk=obj.pk))
编辑的视图函数, 根据pk 拿到数据库中!相对应的数据:
并传给 form类。 使用instance 制定这个就可以了!
POST 过来的时候, 连带着,前端过来的数据, 和 当前更改对象。 一样 使用 instance 传给 form 就行了!
def change_view(self, request, pk): ‘‘‘ 编辑页面 :param request: :return: ‘‘‘ current_change_obj = self.model_class.objects.filter(pk=pk).first() if not current_change_obj: return HttpResponse("要修改的页面不存在,请重新选择") model_form_class = self.get_model_form_class() if request.method == "GET": form = model_form_class(instance=current_change_obj) return render(request, "stark/change.html", {"form": form})if request.method == "POST": form = model_form_class(data=request.POST, instance=current_change_obj) if form.is_valid(): self.save(form, is_update=False) return redirect(self.memory_reverse(self.get_list_url_name)) return render(request, "stark/change.html", {"form": form}) return HttpResponse("编辑页面")
原文地址:https://www.cnblogs.com/chengege/p/10741522.html
时间: 2024-11-09 14:53:07