stark组件开发之编辑功能实现

Posted chengege

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stark组件开发之编辑功能实现相关的知识,希望对你有一定的参考价值。

编辑功能。和添加一样! 唯一不同的就是, 需要编辑一个指定的  记录。
这就需要,在列表页面, 渲染编辑的时候,添加一个 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("编辑页面")

 

以上是关于stark组件开发之编辑功能实现的主要内容,如果未能解决你的问题,请参考以下文章

模拟admin组件自己开发stark组件之搜索和批量操作

stark组件之添加修改页面内容搭建

stark组件

stark组件

stark组件4_pop功能

stark组件开发之提取公共视图函数