Model&Form&ModelForm拾遗

Model&Form&ModelForm拾遗

一、Model&Form&ModelForm

  • Model:用于用户请求数据的验证(针对性弱),但有强大的数据库操作
  • Form:强大的数据验证(用于用户请求数据)
  • ModelForm:强大的数据验证,适中的数据库操作。用于数据库操作(只针对部分操作);用于用户请求的验证(只针对部分操作)

二、Model操作:

  1. 数据表操作(ORM关系对象映射)

    Code First 创建类:自动生成表

    DB First 创建表:自动生成类

    表的一对多操作:ForiegnKey

    class user(models.Model):
        name = models.CharField(max_length=10)
        t = models.ForeignKey('usertype')
    class usertype(models.Model):
        name = models.CharField(max_length=10)

    表的多对多操作:

    第一种方式
    #创建第三张表Favor然后使用ForiegnKey上下链接
    class new(models.Model):
        title = models.CharField(max_length=10)
    class user(models.Model):
        name = models.CharField(max_length=10)
        t = models.ForiegnKey('usertype')
    class Favor(models.Model):
        new = models.ForeignKey('new')
        user = models.ForeignKey('user')
    第二种方式:比较方便(好处很多,主要是在Django的admin中会自动形成下拉框等关联操作)
    #创建ManyToManyField关系不创建第三张表,表中不增加任何列
    #ManyToManyField还有参数
    class new(models.Model):
        title = models.CharField(max_length=10)
        favor = models.ManyToManyField('user')
    class user(models.Model):
        name = models.CharField(max_length=10)
        t = models.ForeignKey('usertype')
    第三种方式:使用参数关联
    class new(models.Model):
        title = models.CharField(max_length=10)
        favor = models.ManyToMany('user',
                                  through="Favor",through_fields=("new","user"))
    class user(models.Model):
        name = models.CharField(max_length=10)
        t = models.ForiegnKey('usertype')
    class Favor(models.Model):
        new = models.ForiegnKey('new',related_name="n") #正向查找使用new,反向查找使用n
        user = models.ForiegnKey('user',related_name="u")
    #正向查找是通过new 来查询new表中的数据,反向查找是通过n 来查询Favor表中的数据

    表的一对一操作:

    #注:一对一关系指的是表中数据一对一关系,而不是表的一对一关系
    #缺点:当表中列特别多的时候可能会出现错误
    class new(models.Model):
        title = models.CharField(max_length=10)
        favor = models.ManyToMany('user',
                                  through="Favor",through_fields=("new","user"))
    class user(models.Model):
        name = models.CharField(max_length=10)
        t = models.ForiegnKey('usertype')
    class Favor(models.Model):
        new = models.ForiegnKey('new',related_name="n") #正向查找使用new,反向查找使用n
        user = models.ForiegnKey('user',related_name="u")
        #userdetail = models.ForiegnKey('UserDetail',unique=True)#相当于OneToOneField
        userdetail = models.OneToOneField('UserDetail')
    #正向查找是通过new 来查询new表中的数据,反向查找是通过n 来查询Favor表中的数据
    class UserDetail(models.Model):
        pwd = models.CharField(max_length=32)

    注:model的错误验证和参数的用法与Form有差别

    连表操作:但是会影响性能

    ? select_related:主动连表操作

    多次sql语句然后拼接:

    ? prefetch_related

  2. 参数操作

    model具体详细请看转载链接(此链接为转载,详细了解请百度路飞学城):https://www.cnblogs.com/wupeiqi/articles/6216618.html

  3. 数据库可以使用同步功能,写读分离,写是一个数据库1,读是一个数据库2,然后把两个数据库同步,写入数据时在数据库1执行操作,读取数据时在数据库2进行操作。

三、Form操作:

  1. model具体详细请看转载链接(此链接为转载,详细了解请百度路飞学城):https://www.cnblogs.com/wupeiqi/articles/6144178.html

四、ModelForm操作:

  1. ModelForm具体详细请看转载链接(此链接为转载,详细了解请百度路飞学城):https://www.cnblogs.com/wupeiqi/articles/6229414.html

原文地址:https://www.cnblogs.com/wylshkjj/p/12192421.html

时间: 2024-11-08 12:24:15

Model&Form&ModelForm拾遗的相关文章

python3-开发进阶Django-form组件中model form组件

Django的model form组件 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来,先来一个简单的例子来看一下这个东西怎么用:比如我们的数据库中有这样一张学生表,字段有姓名,年龄,爱好,邮箱,电话,住址,注册时间等等一大堆信息,现在让你写一个创建学生的页面,你的后台应该怎么写呢?首先我们会在前端一个一个罗列出这些字段,让用户去填写,然后我们从后天一个一个接收用户的输入,创建一个新的学生对象,保存其实,重点不是这些,而是合法性验证,我们需要在前端判

Django之路——form modelform formset modelformset的各种用法

首先上结论: form适用于对单个表单的操作,并且需要对每个字段的验证规则自定义. modelform:适用于对用户提交的单个表单操作,字段可以用model中的表的字段来作为验证规则,适用于快速的进行增加.修改. formset:适用于对多个表单进行操作,字段需要也可以用model中的表的字段来作为验证规则. modelfoemset:适用于对多个表单进行操作,字段需要也可以用model中的表的字段来作为验证规则,速度可能快一些(有待考证) form用法 后端代码 from django.for

form modelform formset modelformset的各种用法

form modelform formset modelformset的各种用法 首先上结论: form适用于对单个表单的操作,并且需要对每个字段的验证规则自定义. modelform:适用于对用户提交的单个表单操作,字段可以用model中的表的字段来作为验证规则,适用于快速的进行增加.修改. formset:适用于对多个表单进行操作,字段需要也可以用model中的表的字段来作为验证规则. modelfoemset:适用于对多个表单进行操作,字段需要也可以用model中的表的字段来作为验证规则,

django model form 保存方法 django-rest-framework save 修改某一项值 方法

django Model Form django-rest-framework save 方法 修改某个数据的值 原文地址:https://www.cnblogs.com/zhaoyingjie/p/9235782.html

django model.form

一. model的知识点 1 class UserInfo(AbstractUser): 2 tel=models.CharField(max_length=32) 3 gender=models.IntegerField(choices=((1,"男"),(2,"女")),default=1) 4 5 yuan=UserInfo.objects.get(pk=1) 6 yuan.get_gender_display() modelform modefform使用

CRM项目实战-动态model form 增加自定义样式

类在实例化之前会执行__new__方法 cls.base_fields ——>form字段  admin_class.model._meta.fields——>model字段 from django.forms import ModelForm def create_dynamic_model_form(admin_class,form_add=False): """动态的生成modelform form_add: False 默认是修改的表单,True时为添加

Django中Form组件拾遗(比较坑爹的地方+易忽略的点)

[001]Form组件之自动渲染一个ID选择器 在前面的章节中,我们使用了Django自带的Form组件帮我们完成对表单数据的校验,借助于Form组件,它帮我们自动渲染出input输入框,之前没怎么注意这块,最近才发现 它帮我们渲染出的input输入框自带了id选择器,来看如下的截图就明白了,这个地方坑了很久: <input class="form-control" id="id_email" name="email" placeholde

Client API Object Model - Form Context

FormContext 提供界面或者界面上控件的的引用. 比如说 quick view control, row in an editable grid 等等. Xrm.Page 和 getFormContext都可以用的引用. 但是Xrm.Page 将来会被弃用, 所以建议搭建开始使用getFormContext 我们来看一下Xrm.Page 和 getFormContext的区别: function displayName() { var firstName = Xrm.Page.getAt

Django 中的Form、ModelForm

一.ModelForm 源码 class ModelForm(BaseModelForm, metaclass=ModelFormMetaclass): pass def modelform_factory(model, form=ModelForm, fields=None, exclude=None, formfield_callback=None, widgets=None, localized_fields=None, labels=None, help_texts=None, erro