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("编辑页面")

原文地址:https://www.cnblogs.com/chengege/p/10741522.html

时间: 2024-08-30 12:21:12

stark组件开发之编辑功能实现的相关文章

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

 路由问题, 已经解决! 然后就是视图函数的问题了: 不想重复写的解决途径就是, python  类的继承了! 写一个基类, 基类定义 增删改查. 然后其他的,全部去继承他! from django.urls import path, re_path from django.http import HttpResponse, JsonResponse from django.shortcuts import render, redirect, reverse from app01 import

stark组件开发之添加按钮显示和URL

添加: 需求: 根据用户的权限, 决定是否,有添加按钮.  通过配置进行定制,预留钩子进行权限的判断. class StartHandler(object): has_add_btn = True # 指定配置,默认显示. 用户在子类中,自定制是否显示 def get_add_btn(self): '''预留钩子,子类中重写该方法. 根据权限的判断是否显示添加按钮''' if self.has_add_btn: return "<a class='btn btn-primary'>添

stark组件开发之组合搜索页面效果和 URL

页面效果,只是样式.这个好解决!yield 的时候. 返回几个样式出去就好了! 并且前端写上一些样式的css {% if search_group_row_list %} <div class="panel panel-default"> <div class="panel-heading"> <i class="fa fa-filter" aria-hidden="true"></i

stark组件配置,二层URL

1.django的admin配置 2 stark组件开发 3.2层url分发 4.小结 1.django的admin配置 model.py from django.db import models # Create your models here. class UserInfo(models.Model): name=models.CharField(max_length=32) age=models.IntegerField() def __str__(self): return self.

Django——stark组件

stark组件是仿照django的admin模块开发的一套组件,它的作用是在网页上对注册的数据表进行增删改查操作. 一.配置 1.创建stark应用,在settings.py中注册stark应用 stark APP专门用于存放自定义组件的核心代码. manage.py@stark_demo > startapp stark 在settings.py文件注册stark: INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth'

.NET开发邮件发送功能的全面教程(含邮件组件源码)

ref: http://www.cnblogs.com/heyuquan/p/net-batch-mail-send-async.html 今天,给大家分享的是如何在.NET平台中开发"邮件发送"功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1)         邮件基础理论知识 2)         邮件发送相关.NET类库 3)         介绍我开发的一个发送邮件的小组件(MailHelper) 4)         MailHelper组

crm 使用stark组件

# Create your models here. from django.db import models class Department(models.Model): """ 部门表 市场部 1000 销售 1001 """ title = models.CharField(verbose_name='部门名称', max_length=16) code = models.IntegerField(verbose_name='部门编号',

饿了么基于Vue2.0的通用组件开发之路(分享会记录)

Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库.今天我们要分享的就是开发 Element 的一些心得. 官网:http://element.eleme.io/#/github:https://github.com/ElemeFE/element ## 设计目的 大部分项目起源都是源于业务方的需求,Element 也是一样.随着公司业务发展,内部开始衍生出很多后台系统,UED 部门也接到越来越多的设计需求,

VCL组件开发

4.1 TObject分支 下面几部分分别对包含于五个主要分支中的类做出简要地描述,为完整地说明VCL对象的分层结构,引用了包含于产品中的VCL对象分层结构图. 所有的VCL对象都派生于TObject,其方法定义了构造.析构.消息处理等基本特征.VCL对象的许多强大的功能都建立在TObject给出的这些方法的基础之上.通过提供下列方法,TObject封装了所有VCL对象最基本的通用特征: · 在对象被创建或销毁时响应的能力. · 对象的类型和实例信息,及有关对象发布的属性的运行时类型信息(RTT