相关文章推荐
class Add_Edit_ConsultRecord(View):
    def get(self, request, edit_id=None):
        if edit_id is None:
            # 新增get,# 实例化一个包含当前销售的跟进记录
            consult_obj = ConsultRecord(consultant=request.user)
        else:
            # 编辑get,
            consult_obj = ConsultRecord.objects.filter(pk=edit_id).first()
        form_obj = ConsultRecordForm(instance=consult_obj)
        return render(request, "consultrecord_change.html", {'form_obj': form_obj, 'edit_id': edit_id})
    def post(self, request, edit_id=None):
        if edit_id is None:
            # 新增post,# 实例化一个包含当前销售的跟进记录
            consult_obj = ConsultRecord(consultant=request.user)
        else:
            # 编辑post,
            consult_obj = ConsultRecord.objects.filter(pk=edit_id).first()
        form_obj = ConsultRecordForm(request.POST, instance=consult_obj)
        if form_obj.is_valid():
            # 通过数据校验
            form_obj.save()
            return redirect(reverse("consult_records", args=('0')))
相比较BaseForm,BaseModelForm多了instance参数,它等价于Model模型的一个实例
ModelForm中传递了initial也一样可以生效,同时还会设置到Model中

form.py

class BootForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)  
        for field in self.fields.values():
            field.widget.attrs.update({'class': 'form-control'})
            field.error_messages = {"required": "该字段不能为空"}
# 跟进记录Form
class ConsultRecordForm(BootForm):
    class Meta:
        model = ConsultRecord
        fields = "__all__"
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 清除delete_status字段的样式
        self.fields['delete_status'].widget.attrs.pop('class')
        # 当前登录的用户(销售)对象
        # print(self.instance.consultant)
        # self.fields['customer'].choices = [('', '---------'), (2, '239966930011'),]
        相比较BaseForm,BaseModelForm多了instance参数,它等价于Model模型的一个实例
         ModelForm中传递了initial也一样可以生效,同时还会设置到Model中
        # self.instance.consultant.customers.all()
        先得到当前登录对象,再通过销售对象反向查询客户对象
        通过列表生成式生成choices结构[('', '---------'),(1,'2399669300'), (2, '239966930011'),]
        # 限制添加和编辑时多选框显示的所咨询客户只能是自己跟进的,
        customer_choices = [(i.pk, str(i)) for i in self.instance.consultant.customers.all()]
        customer_choices.insert(0, ('', '---------'))# insert 列表插入数据,默认选择框
        # 将原本的客户对像替换掉
        self.fields['customer'].choices = customer_choices
        # 限制添加和编辑时多选框显示的跟进人只能是当前登录人,
        # print(list(self.fields['customer'].widget.choices))
        self.fields['consultant'].choices = [(self.instance.consultant.pk, self.instance.consultant.username)]
author = model s.OneToOneField('authorDetail',on_delete= model s.CASCADE) # on_delete级联删除,一方删除,另一方也跟着删除, django 2.0版本以下默认有级联删除属性 publishs= model s.ForeignKey(to="Publish",on_delete= model s.CASCADE,) 网站的数据由于具有实时性,需要定时进行更新,而网站的数据通常都是由数据库进行存储管理的,本次实现的就是在网页上 显示 数据库 的数据。 接下来分两步来做这个事,添加网页,读取数据库; 首先需要在工程 新建一个app python ma 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把 model form 组合 起来,对,你没猜错,相信自己的英语水平。 先来一个简单的例子来看一下这个东西怎么用: 比如我们的数据库 有这样一张学生表,字段有姓名,年龄,爱好,邮箱,电话,住址,注册时间等等一大堆信息,现在让你写一个创建学生的页面,你的后台应该怎么写呢? 首先我们会在前端一个一个罗列出这些字段,让用户去填... 在项目 ,我们通常会用 django model form 帮助我们快速生成前端的样式,提升开发效率。但是有时,当我们需要让一些字段, 显示 一些特殊的样式时,就需要对 model form 的默认样式,手动进行一些修改: 选择颜色 示例 颜色选项,本来在数据库 是choices字段(字段名直接使用css样式 的颜色代码,方便后面自定义操作),在 model from自动渲染是一个select标签,如下图 通过自定义的修改标签样式,可以改变标签的类型,并配合前端的一些技巧,最终修改后的效果如下。 新建widgets.p django python 语言快速实现web服务的大杀器,其开发效率可以非常的高!但因为秉承了语言的灵活性, django 框架又太灵活,以至于想实现任何功能都有种“条条大路通罗马”的感觉。这么多种选择放在一起,如何分出高下?我想此时的场景下就两个标准:1、相同的功能用最少的代码实现(代码少BUG也会少);2、相对最易于理解,从而易于维护和扩展。书归正传,web服务允许用户输入,基本上要靠 表单 。而dj <!--要使用 Radio 组件,只需要设置v- model 绑定变量,选 意味着变量的值为相应 Radio label属性的值,label可以是 String、Number或Boolean。--> <el-radio v- model ="radio" la... 定义数据模型,以类的方式定义数据表的字段。在数据库创建数据表时,数据表由模型 定义的类生成; 在视图 导入模型所定义的类,该类也称为数据表对象, Django 为数据表对象提供独有的数据操作方法ORM,可以实现数据库操作,从而获取数据表数据; 视图函数获取数据后,将数据以字典、列表或对象的方式传入给HTML模板,... 文章目录1. 测试环境搭建1.1 创建项目1.2 解决 问题 1.3 数据库配置1.4 Pycharm连接数据库1.5 测试脚本2. 单表操作2.1 创建 表单 2.2 数据库迁移2.3 增加数据2.4 删除数据2.5 修改值3. 展示SQL语句3.1 方法查看3.2 配置文件4. objects 方法4.1 objects对象4.2 获取数据对象4.3 过滤条件4.4 头尾的值4.5 获取值4.6 去重4.7 排序4.7 倒序4.8 统计4.9 排除4.10 判断值是否存在5. 字段方法5.1 双向方法5.2