当前位置: 亚洲城ca88 > ca88 > 正文

CRM客户关系管理系统,python学习笔记

时间:2019-05-14 14:08来源:ca88
  9.1.filter_horizontal优化 (1)添加Choose ALL 和Remove ALL  table_obj_change_component.html    js代码 function MoveAllElements(from_id,to_id) { console.log( $("#" from_id).children()) $("#" from_id).children().each(function (

 9.1.filter_horizontal优化

(1)添加Choose ALL 和Remove ALL

 table_obj_change_component.html

ca88 1

 

 js代码

function MoveAllElements(from_id,to_id) {

        console.log( $("#" from_id).children())
         $("#" from_id).children().each(function () {
             MoveSelectedOption(this,to_id);
         })
    }

ca88 2

 

 (二)加多过滤框效用

ca88 3

 

 js代码

function FuzzSearch(ele){

        console.log($(ele).val())
        var search_text = $(ele).val().toUpperCase();
        $(ele).next().children().each(function () {
            if ( $(this).text().toUpperCase().search(search_text) != -1){
                $(this).show();
            }else {
                $(this).hide();
            }
        })

    }

ca88 4

        },

register装饰器

register(*models[, site=django.admin.sites.site])

一.7中新添长。Model和ModelAdmin能够这么注册:

from django.contrib import admin
from .models import Author

@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
    pass

能够一遍注册七个Model,并且能够行使自个儿定制的AdminSite:

from django.contrib import admin
from .models import Author, Reader, Editor
from myproject.admin_site import custom_admin_site

@admin.register(Author, Reader, Editor, site=custom_admin_site)
class PersonAdmin(admin.ModelAdmin):
    pass

 

 玖.②.kingadmin对象删除功效开辟

(1)kingadmin/urls.py

#删除
    url(r'^(w )/(w )/(d )/delete/$', views.table_obj_delete,name='obj_delete'),

(2) table_obj_change_component.html

ca88 5

 

(3)kingamdin/views.py

def table_obj_delete(request,app_name,model_name,obj_id):
    '''删除功能'''
    admin_class = site.enable_admins[app_name][model_name]
    obj = admin_class.model.objects.get(id=obj_id)

    return render(request,'kingadmin/table_obj_delete.html',locals())

(4)新建table_obj_delete.html

{#kingadmin/templates/kingadmin/table_obj_delete.html#}

{% extends 'kingadmin/index.html' %}
{% load kingadmin_tags %}

{% block right-content-container %}
    <h2 class="page-header">{% get_model_name admin_class %}</h2>
    <h4 class="page-header">删除{{ form_obj.instance }}</h4>

<div>
delete
{{ obj }}


</div>

{% endblock %}

ca88 6

 

删去的时候显得要被删去对象的持有关乎对象

 

ca88 7

ca88 8

 

(5)kingadmin_tags.py

@register.simple_tag
def display_all_related_objs(obj):
    """
    显示要被删除对象的所有关联对象
    """
    ele = "<ul><b style='color:red'>%s</b>" % obj

    #获取所有反向关联的对象
    for reversed_fk_obj in obj._meta.related_objects:
        #获取所有反向关联对象的表名
        related_table_name =  reversed_fk_obj.name
        # 通过表名反向查所有关联的数据
        related_lookup_key = "%s_set" % related_table_name
        related_objs = getattr(obj,related_lookup_key).all()
        ele  = "<li>%s<ul> "% related_table_name
        #get_internal_type(),获取字段的类型,如果是m2m,就不需要深入查找
        if reversed_fk_obj.get_internal_type() == "ManyToManyField":  # 不需要深入查找
            for i in related_objs:
                ele  = "<li><a href='/kingadmin/%s/%s/%s/change/'>%s</a> 记录里与[%s]相关的的数据将被删除</li>" 
                       % (i._meta.app_label,i._meta.model_name,i.id,i,obj)
        #如果不是m2m,就递归查找所有关联的数据
        else:
            for i in related_objs:
                ele  = "<li><a href='/kingadmin/%s/%s/%s/change/'>%s</a></li>" %(i._meta.app_label,
                                                                                 i._meta.model_name,
                                                                                 i.id,i)
                #递归查找
                ele  = display_all_related_objs(i)

        ele  = "</ul></li>"

    ele  = "</ul>"

    return ele

 

(6)table_obj_change_component.html

ca88 9

 

 (7)table_obj_delete.html

{#kingadmin/templates/kingadmin/table_obj_delete.html#}

{% extends 'kingadmin/index.html' %}
{% load kingadmin_tags %}

{% block right-content-container %}
    <h2 class="page-header">{% get_model_name admin_class %}</h2>
    <h3 class="page-header alert alert-danger">你确定要删除吗?{{ form_obj.instance }}</h3>

<div>
delete {{ obj }}

{% display_all_related_objs obj as all_related_obj_eles %}
{{ all_related_obj_eles|safe }}

<form method="post">
    {% csrf_token %}
    <input type="submit" class="btn btn-danger" value="确认删除">
    <a class="btn btn-info" >返回</a>

</form>
</div>
{% endblock %}

 

 删除的时候会提示全体关乎对象

 ca88 10

 

修改分页(设置暗许突显多少条数据)

kingamdin/admin_base.py

class BaseKingAdmin(object):

    list_display = []
    list_filter = []
    search_fields = []
    #只读
    readonly_fields = []
    filter_horizontal = []
    list_per_page = 5

kingadmin/views.py

ca88 11

 

def index(request):
    before = models.userInfo.objects.all()  #返回一个集合
    obj = HomeForm.importForm()
    after = models.userInfo.objects.all()
    return render(request,"home/index.html",{"obj":obj})

Django中输入django-adminpy startproject mysite后并未有新建项目同时从不任何反应,那该怎消除?

在django经常安装的景况下,
看下有未有权力,系统有未有藏身的同名文件夹。
django-admin.py startproject mysite > 1.txt ,看下Log  

admin site(一)ModelAdmin Options,djangomodeladmin Admin管理分界面是django的徘徊花级应用。它读取你格局中的元数据,然后提须要您一个强劲而且可...

第九章、filter_horizontal优化和kingadmin删除作用

首先种方法:

template options

某个定制admin模板时钦定模板所用的选项。

add_form_template
add_view()使用的模板.

change_form_template
change_view()使用的模板.

change_list_template
changelist_view()使用的模板.

delete_confirmation_template
delete_view()使用的模板。

delete_selected_confirmation_template
delete_selected action method 使用的模版。

ModelAdmin.object_history_template
history_view()使用的沙盘,日志。

 

在写form表单的时候

ModelAdmin对象

id     color

Admin是什么样行事的

当把'django.contrib.admin'添加到INSTALLED_应用程式S后,django会自动搜索各种app中的admin.py模块并且import载入。

class apps.AdminConfig
Django 1.7新增.
admin默许的AppConfig类.当django运行时会实施autodiscover()。

class apps.SimpleAdminConfig
Django 1.7新增.
好像于AdminConfig,不会推行autodiscover().

autodiscover()
import每个app的admin.py模块。

Django 1.7改变:
在在此在此之前的本子中要求在urls.py中手动运转此办法去寻找每一种app的admin.py,一.七后AdminConfig会自行施行此格局。

1旦正在利用定制的AdminSite,须要将ModelAdmin的子类载入到和谐的代码中并全体登记到定制的AdminSite中。这种情状下需求截止活动discovery(),能够将'django.contrib.admin.apps.SimpleAdminConfig'替代INSTALLED_APPS中的'django.contrib.admin'。

删除

干什么只好够在Python27Libsite-packagesdjangobin目录下选取django-adminpy startproject?

您能够试试把
"C:Python27;C:Python27Scripts;"出席 path 中,那样你就不要单独把每2个安装在 site-packages 目录下东西增添到 path 中。

 

    models.Tb1.objects.filter(id__range=[1, 20])   # 范围bettwen and

Django admin site(一)ModelAdmin Options,djangomodeladmin

Admin管理分界面是django的剑客级应用。它读取你格局中的元数据,然后提供给您贰个强有力而且能够运用的界面,网址理事能够用它立时向网址中增添内容。

要选取admin,能够遵从下边的步调:

运作python manage.py migrate提示成立superuser后就足以访问

from django.shortcuts import render
from  app01.forms import home as HomeForm
def index(request):
    obj = HomeForm.importForm()
    return render(request,"home/index.html",{"obj":obj})

ModelAdmin选项

actions

admin actions的列表

actions_on_top
actions_on_bottom

action的位置。

date_hierarchy

将date_hierarchy设成Model的Date菲尔德恐怕DateTimeField,就可以为admin中的此Model加多日期档期的顺序。

fields

exclude

决定Model的form中表现怎么样字段。田野(field)s是包蕴,exclude是解除。

from django.contrib import admin

class AuthorAdmin(admin.ModelAdmin):
    fields = ('name', 'title')

class AuthorAdmin(admin.ModelAdmin):
    exclude = ('birth_date',)

能够将有个别字段放在同等行,如下url和title字段放在一样行:

class FlatPageAdmin(admin.ModelAdmin):
    fields = (('url', 'title'), 'content')

fieldsets

田野同志sets是双元元组(name, 田野先生_options)的列表,能够将字段分块:

from django.contrib import admin

class FlatPageAdmin(admin.ModelAdmin):
    fieldsets = (
        (None, {
            'fields': ('url', 'title', 'content', 'sites')
        }),
        ('Advanced options', {
            'classes': ('collapse',),
            'fields': ('enable_comments', 'registration_required', 'template_name')
        }),
    )

name是块的标题,field_options是二个字典。

field_options的key有上边二种:

  fields

字段名称的元组,在田野先生set中展现

{
'fields': (('first_name', 'last_name'), 'address', 'city', 'state'),
}

  classes

提须要田野set的额外CSS类的列表。

  description

能够在田野同志set最上部额外出示的文件。

filter_horizontal
filter_vertical

Model有ManyToManyField字段时,使用filter_horizontal,filter_vertical能够从现存的选项中多选。三个为横排,一个为竖排。

form

行使的表单。

from django import forms
from django.contrib import admin
from myapp.models import Person

class PersonForm(forms.ModelForm):

    class Meta:
        model = Person
        exclude = ['name']

class PersonAdmin(admin.ModelAdmin):
    exclude = ['age']
    form = PersonForm

发生冲突时,ModelAdmin优先。上边包车型地铁事例中age会被解决,但name会在页面中显得。

formfield_overrides

能够覆盖Model表单分界面包车型地铁片段字段的选项,为局地一定项指标字段加多本身定制的预制构件

比方,想为自个儿Model的TextField字段使用富文本编辑器:

from django.db import models
from django.contrib import admin

# Import our custom widget and our model from where they're defined
from myapp.widgets import RichTextEditorWidget
from myapp.models import MyModel

class MyModelAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.TextField: {'widget': RichTextEditorWidget},
    }

list_display

Model的change list页面可以显示的字段,倘诺不设置list_display,admin界面会自动突显Model的__unicode__()结果。

 list_display中有4种值:

  • model的一个字段

    list_display = ('first_name', 'last_name')
    
  • 二个可调用的以model为参数的函数

    def upper_case_name(obj):
        return ("%s %s" % (obj.first_name, obj.last_name)).upper()
    upper_case_name.short_description = 'Name'
    
    class PersonAdmin(admin.ModelAdmin):
        list_display = (upper_case_name,)  
    
  • ModelAdmin的二天性质,类似于可调用函数

    class PersonAdmin(admin.ModelAdmin):
        list_display = ('upper_case_name',)
    
        def upper_case_name(self, obj):
            return ("%s %s" % (obj.first_name, obj.last_name)).upper()
        upper_case_name.short_description = 'Name'
    
  • Model的1个属性,类似于可调用函数

    from django.db import models
    from django.contrib import admin
    
    class Person(models.Model):
        name = models.CharField(max_length=50)
        birthday = models.DateField()
    
        def decade_born_in(self):
            return self.birthday.strftime('%Y')[:3]   "0's"
        decade_born_in.short_description = 'Birth decade'
    
    class PersonAdmin(admin.ModelAdmin):
        list_display = ('name', 'decade_born_in')
    

    Note:

  • 假设字段是ForeignKey,会显得外键的__unicode__。

  • 不支持ManyToManyField
  • 如果是BooleanField,会显示on或者off。
  • 倘若提供的字符串是Model只怕ModelAdmin的不二法门也许二个可调用函数,django会自动的HTML-escape输出,如若不想转义,能够将艺术的allow_tags设为True。为了幸免XSS跨站攻击,须求运用format_html转义用户的输入:

    from django.db import models
    from django.contrib import admin
    from django.utils.html import format_html
    
    class Person(models.Model):
        first_name = models.CharField(max_length=50)
        last_name = models.CharField(max_length=50)
        color_code = models.CharField(max_length=6)
    
        def colored_name(self):
            return format_html('from django.db import models
    from django.contrib import admin
    
    class Person(models.Model):
        first_name = models.CharField(max_length=50)
        birthday = models.DateField()
    
        def born_in_fifties(self):
            return self.birthday.strftime('%Y')[:3] == '195'
        born_in_fifties.boolean = True
    
    class PersonAdmin(admin.ModelAdmin):
        list_display = ('name', 'born_in_fifties') 
    
  • Model的__str__或者__unicode__办法也得以行使

    list_display = ('__str__', 'some_other_field')
    
  • 如果list_display中的项不是数据库的骨子里字段,那么不得以以此项排序。反之,则足以以此项排序,能够透过安装 admin_order_田野属性建议那么些实际。

    from django.db import models
    from django.contrib import admin
    from django.utils.html import format_html
    
    class Person(models.Model):
        first_name = models.CharField(max_length=50)
        color_code = models.CharField(max_length=6)
    
        def colored_first_name(self):
            return format_html('colored_first_name.admin_order_field = '-first_name'
    
  • list_display中的项也得以是特色:

    class Person(object):
        first_name = models.CharField(max_length=50)
        last_name = models.CharField(max_length=50)
    
        def my_property(self):
            return self.first_name   ' '   self.last_name
        my_property.short_description = "Full name of the person"
    
        full_name = property(my_property)
    
    class PersonAdmin(admin.ModelAdmin):
        list_display = ('full_name',)    
    

list_display_link

在这之中的字段会被链接到mode的change页面

class PersonAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name', 'birthday')
    list_display_links = ('first_name', 'last_name')

list_editable

里头的字段在change list页面是可以被改造的。在里边的字段也不能够不在list_display中。

list_filter

在那之中的字段能够视作过滤器过滤model 。能够是相关域。

class PersonAdmin(admin.UserAdmin):
    list_filter = ('company__name',)

list_max_show_all

show all页面上的model数目,缺省200。

list_per_page

每个change list页面的model数目,缺省100。

list_select_related

与select_related()有关。

ordering

排序。

paginator

运用的分页。缺省django.core.paginator.Paginator 。

prepopulated_fields

预置字段。

radio_fields

使用radio-button代替select-box( ForeignKey或者有choices选项时)。

class PersonAdmin(admin.ModelAdmin):
    radio_fields = {"group": admin.VERTICAL}

raw_id_fields

会展现在那之中字段的id,用于ForeignKey或许ManyToManyField。

class ArticleAdmin(admin.ModelAdmin):
    raw_id_fields = ("newspaper",)

readonly_fields

只可读不可编辑的字段。也得以是措施:

from django.contrib import admin
from django.utils.html import format_html_join
from django.utils.safestring import mark_safe

class PersonAdmin(admin.ModelAdmin):
    readonly_fields = ('address_report',)

    def address_report(self, instance):
        # assuming get_full_address() returns a list of strings
        # for each line of the address and you want to separate each
        # line by a linebreak
        return format_html_join(
            mark_safe('<br/>'),
            '{0}',
            ((line,) for line in instance.get_full_address()),
        ) or "I can't determine this address."

    # short_description functions like a model field's verbose_name
    address_report.short_description = "Address"
    # in this example, we have used HTML tags in the output
    address_report.allow_tags = True

save_as

设为Ture时,change页面的 "Save and add another"开关会被"Save as"取代。

save_on_top

设为Ture时,change页面的最上端也可能有save按键。

search_fields

可检索字段。

view_on_site

是否出示View on site链接。

增加:

第一种艺术:

python manage.py migrate

home/upload.html

而在models中

  contains 操作

表二:group_table

小技巧

###############################

  group by操作

  第一种:

        'OPTIONS': {

views.home.py

                'django.template.context_processors.debug',

  in 和 not in 操作 

    color 这里的color是ball中的color

暗中认可情况下 id 列会自动生成

1    red

id    size    color

<form action="/index/">
<p>{{ obj.host }}</p>
<p>{{ obj.host_type }}</p>
</form>

python manage.py makemigrations

    endswith:    以内定字符串结尾 ,区分轻重缓急写

2     gray

############################

CTO

表san  gather_table

    obj.save()

3    blue

我们来看一下数码无法实时刷新的缘故。

                        可承受字典类型的参数

生成select标签

forms/home.py

templates/account/login.html

username  group

3     10       1

表二:球表 ball

  获取单条数据:

                'django.core.context_processors.static', #亟待充分

        'APP_DIRS': True,

error = obj.errors.as_json()

        'BACKEND': 'django.template.backends.django.DjangoTemplates',

from django import template
register = template.Library()
@register.simple_tag
def err_msg(error_list):
    if error_list:
        return error_list[0]
    return ""

    

    models.table1.objects.all().first()

第三种艺术:

ca88,    models.Tb1.objects.all()[10:20]  分页的时候会用到

基本操作

    models.table壹.objects.filter(name='seven').update(gender='0') 更新钦命条件的数额,

举个例子未有写action ,暗许会提交到地面

` STATIC_URL `的 值 为setting.py中的 

一经那样的话,假如静态文件的门径爆发变化的时候,大家就供给修改好多文本的静态文件的门道

if request.method=="POST":
if obj.is_valid():
all_data = obj.clean()
else:
error = obj.errors  # 原始数据  需要记住  ,用于form的提交
return HttpResponse(error)

]

     obj.save()

如若要每便都获得最新的数量,大家将在每一遍都对HOST_TYPE 实行一回读取。而类每一趟被实例化的时候都要实施__init__方法 ,所以大家只要将HOST_TYPE 放入__init__形式就能够。

1、models.AutoField  自增列 = int(11)
  如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,
  必须将给列设置为主键 primary_key=True。
2、models.CharField  字符串字段
  必须 max_length 参数
3、models.BooleanField  布尔类型=tinyint(1)
  不能为空,Blank=True
4、models.ComaSeparatedIntegerField  用逗号分割的数字=varchar
  继承CharField,所以必须 max_lenght 参数
5*、models.DateField  日期类型 date
  对于参数,auto_now = True 则每次更新都会更新这个时间;
  auto_now_add 则只是第一次创建添加,之后的更新不再改变。
6、models.DateTimeField  日期类型 datetime
  同DateField的参数
7、models.Decimal  十进制小数类型 = decimal
  必须指定整数位max_digits和小数位decimal_places
8、models.EmailField  字符串类型(正则表达式邮箱) =varchar
  对字符串进行正则表达式
9、models.FloatField  浮点类型 = double
10、models.IntegerField  整形
11、models.BigIntegerField  长整形
  integer_field_ranges = {
    'SmallIntegerField': (-32768, 32767),
    'IntegerField': (-2147483648, 2147483647),
    'BigIntegerField': (-9223372036854775808, 9223372036854775807),
    'PositiveSmallIntegerField': (0, 32767),
    'PositiveIntegerField': (0, 2147483647),
  }
12、models.IPAddressField  字符串类型(ip4正则表达式)
13、models.GenericIPAddressField  字符串类型(ip4和ip6是可选的)
  参数protocol可以是:both、ipv4、ipv6
  验证时,会根据设置报错
14、models.NullBooleanField  允许为空的布尔类型
15、models.PositiveIntegerFiel  正Integer
16、models.PositiveSmallIntegerField  正smallInteger
17、models.SlugField  减号、下划线、字母、数字
18、models.SmallIntegerField  数字
  数据库中的字段有:tinyint、smallint、int、bigint
19、models.TextField  字符串=longtext
20、models.TimeField  时间 HH:MM[:ss[.uuuuuu]]
21、models.URLField  字符串,地址正则表达式
22、models.BinaryField  二进制
23、models.ImageField   图片
24、models.FilePathField 文件

1对多: 其实正是给2个表创造外键约束:

STATIC_URL = '/static/'

models.ForeignKey('myColor',to_field="id")
def upload(request):
    if request.method=="POST":
        # inp_post = request.POST
        inp_files = request.FILES
        file_obj =  inp_files.get("myfile_name")
        print  file_obj.name  #获取文件名
        print  file_obj.size  # 获取文件大小
        
        f=open("filename","wb")
        for data in file_obj.chunks():
            f.write(data)
        f.close()
    return render(request,'home/upload.html')
from django import forms
class importForm(forms.Form):
    host = forms.CharField()
    host_type = forms.IntegerField(
        widget=forms.Select()
    )
    def __init__(self,*args,**kwargs):
        super(importForm,self).__init__(*args,**kwargs)
        HOST_TYPE= (
            (1,"AAA"),
            (2,"BBB"),
            (3,"CCC"),
            (4,"DDD"),
        )
        self.filed["host_type"].wdiget.choices = HOST_TYPE

form 验证和错误音讯

class myColor(models.Model):
    color = models.CharField(max_length=16)
class ball(models.Model):
    size = models.IntegerField()
    color = models.ForeignKey('myColor')  #生成的列名为 color_id

连表操作 (注意双下划线的行使)

models生成的第三张表,会并发叁列,如下:

当表A中创设数量时,该列的值是其余一张表中的数目标值,(可重新选拔)

        'DIRS': [os.path.join(BASE_DIR, 'templates')]

ming    CTO

     obj.c1 = '111'

    from django.db.models import Count, Min, Max, Sum

2     20     3

一对一:

app01/models.py

form表单提交时 的谬误提醒

    models.table1.objects.create(**dic)  #form提交的数据 ,获取后为字典,能够用在此处

# -*- coding:utf-8 -*-
from django.db import models
# Create your models here.
class userInfo(models.Model):
    name = models.CharField(max_length=22)
    mtime = models.DateTimeField(auto_now=True) #修改时间
    ctime = models.DateTimeField(auto_now_add=True) #创建时间
    
    def __unicode__(self):
        return self.name  #输出对象时,输出name列
    <form action="/login/" method="post">
        <p>{{ obj.username }}</p>
        <p>{{ obj.password }}</p>
        <input type="submit">
    </form>

    models.Tb1.objects.exclude(id__in=[11, 22, 33])  not in操作

1、null=True
  数据库中字段是否可以为空
2、blank=True
  django的 Admin 中添加数据时是否可允许空值
3、primary_key = False
  主键,对AutoField设置主键后,就会代替原来的自增 id 列
4、auto_now 和 auto_now_add
  auto_now   自动创建---无论添加或修改,都是当前操作的时间
  auto_now_add  自动创建---永远是创建时的时间
5、choices
        GENDER_CHOICE = (
                (u'M', u'Male'),
                (u'F', u'Female'),
            )
gender = models.CharField(max_length=2,choices = GENDER_CHOICE)
6、max_length  设置最大长度
7、default  默认值
8、verbose_name  Admin中字段的显示名称
9、name|db_column  数据库中的字段名称
10、unique=True  不允许重复
11、db_index = True  数据库索引

12、editable=True  在Admin里是否可编辑
13、error_messages=None  错误提示
14、auto_created=False  自动创建
15、help_text  在Admin中提示帮助信息
16、validators=[]  自定义验证,类似于form自定义验证
17、upload-to   指定上传路径

将static 修改为变量

    models.table1.objects.all() 

局部代码如下:

home/index.html

    __color  这里的__color 是myColor中的color

    istartswith:  以钦赐字符串初始 ,不区分轻重缓急写

views/account.py

###################################################

rain    CEO

TEMPLATES = [

商家里有N个人 分了M个组 ,每一种人方可加入三个组;

  大小相比较

                'django.template.context_processors.request',

    obj = models.table1(col01='aa', col02='bb')

    models.myColor.objects.create(color="pink")
    
    models.ball.objects.create(size= 10,color_id= "pink")

注意: 
    第二种方式:  在models做连表操作的时候,ball类的color 关联了myColor类的 color
    ,ball中的color 为一个对象,对应的, 在数据库表中,ball表中的color列的名称为 color_id

大家有如下两张表:

达成如下,修改importForm 类

我们开始展览如下操作就可以

models 基本操作

在html文件头

model中的字段

                'django.contrib.messages.context_processors.messages',

......

设若myColor表的值 在ball表中不可能重复 ,那正是一定。

    models.table一.objects.get(id=1贰叁) 假如条id不设不时,django会报黄页,不引入应用

在shell中实践如下两句

############################################

views/home.py

    dic = {'col01':'aa', 'col02':'bb'}

username    age    

obj = accountForm.loginForm(request.POST) 

表一: user_table

创建表

1对时候大家须要用户 录入数据的时候利用一定的聚集类型,比方地区,用户类型等,

    obj = models.ball.objects.filter(color__color= val)

对于ajax

    startswith:   以内定字符串初步 ,区分轻重缓急写

def login(request):
    obj = accountForm.loginForm(request.POST)
    if request.method=="POST":
        if obj.is_valid():
            all_data = obj.clean()
        else:
            error = obj.errors  # 原始数据  需要记住  ,用于form的提交
            # 这里的error 是一个Errorlist
            #参考上面的代码:error中也包含username,password
            #  print type(error)
            # print error["username][0]
            # print error["password][0]
            # error = obj.errors.as_json()  # json数据  需要记住  用户ajax
            # error = obj.errors.as_ul() #生成一个 <ul><li></li>...</ul> ,几乎不用
            # error = obj.errors.as_data() # error = obj.errors 两种一样 ,原生数据
        return render(request,"account/login.html",{"obj":obj,"error":error})
    return render(request,"account/login.html",{"obj":obj})

这一年就要用到select标签

ming      19     female

class group_table(models.Model):
    groupname = models.CharField(max_length=20)

class user_table(models.Model):
    username = models.CharField(max_length=20)
    age = models.IntegerField()
    user_group = models.ManyToManyField("group_table")

{% load staticfiles %}

    models.Tb1.objects.filter(name__contains="ven")   区分轻重缓急写

  

获取数据的时候使用 点 .

  获取第一条数据

alex    CEO

            'context_processors': [

models 操作

     models.Tb1.objects.filter(id__lt=10, id__gt=1)    获取id大于1 且 小于10的值

from django.shortcuts import render
from  app01.forms import account as accountForm
def login(request):
    obj = accountForm.loginForm(request.POST)  #关键01
    if request.method=="POST":
        return render(request,"account/login.html",{"obj":obj})
    return render(request,"account/login.html",{"obj":obj})

    models.Tb1.objects.filter(id__in=[11, 22, 33])  in操作,获取id等于11、22、33的数据

     models.Tb1.objects.filter(id__lt=10)          获取id小于10的值

举个例子表明

###############################

template/account/login.html

alex    CFO

        ,

一旦写action 值两边要求有/ ,

template/account/login.html

#########################

创制成功后 ,若是本人在向ball表插入数据的时候,ball表的color列的值 就亟须是myColor表中设有的值

  limit 、offset 操作

            ],

    val = request.POST["color"]

表一:颜色表 color表

    <form action="/login/" method="post">
        <p>{{ obj.username }}
            {% err_msg error.username %}
        </p>
        <p>{{ obj.password }} {{ error.password }}</p>
        <input type="submit" value="submit">
        <input type="button" value="ajax" onclick="ajaxSubmit();">
    </form>
    <script>
        function ajaxSubmit(){
            $.ajax({
                url:"/login/"
                type:"POST"
                data:{"username":"","password":""}
            });
        }
    </script>
    models.myColor.objects.create( color = "pink")
    
    color_obj = models.myColor.objects.get(color="pink")
    models.ball.objects.create(size=10,color= color_obj)

python manage.py makemigrations

from django import forms
class loginForm(forms.Form):
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput())

alex       18    

1     10     2   

注意:

  第二种:

                        能够用来select的choices

  获取符合条件的多少

<script src="` STATIC_URL `js/jquery-2.1.4.min.js"></script>

在django1.玖中大家需求修改setting.py,加多一条语句

<script src="{% static  'js/jquery-2.1.4.min.js'%}"></script>

HOST_TYPE这里可设置为从文件大概数据库读取的数额

  第3种方式:

    models.Tb1.objects.filter(name='seven').count()

只要在数据库中 ,大家要求建设构造第一张表 来连接两张表的涉嫌

设若myColor表中有二种颜色: red blue gray

关键01

其次种格局:

静态文件路线的装置

每趟实例化importForm类的时候 ,都实行一回__init__方法,大家就保证了历次都读取到最新的值。

当大家从文件或然数据库 读取配置的时候,无法分明文件也许数据库的源委是或不是早已改换。

注意:

  第二种艺术:

多对多

    <form action="/login/" method="post">
        <p>{{ obj.username }}
            {% err_msg error.username %}
        </p>
        <p>{{ obj.password }} {{ error.password }}</p>
        <input type="submit">
    </form>

我们创设的应用app01 下富含1个models.py ,我们在此间就足以。

from django import forms
class importForm(forms.Form):
    HOST_TYPE= (
        (1,"AAA"),
        (2,"BBB"),
        (3,"CCC"),
    )
    host = forms.CharField()
    host_type = forms.IntegerField(
        widget=forms.Select(choices=HOST_TYPE)
    )

其次种格局无需再setting.py中设置'django.core.context_processors.static',

在html文件中装置

选用场景:

app01/templatetags/custag.py  #那边定了custom tag

    {

此处将请求来的数目,封装到了obj对象中。此时。obj对象不仅仅可以用于评释,也得以将交给的数额再一次映未来页面中。

咱俩知晓django的model 也是叁个ORAV四M,大家创立的类就等价于数据库的表,实例化类生成的指标正是一条数据。 对象.id 等正是每行的数据.

字段的参数

     models.Tb1.objects.filter(id__gt=1)           获取id大于1的值

  order by操作

这种情况是在壹对多基础上做的,参照他事他说加以侦察上边的壹对多,

  第两种办法:

<script src="/static/js/jquery-2.1.4.min.js"></script>

设ball表为空表,我们想个中插入一条数据,颜色为red,那么在插入第三条数据的时候,可用的水彩就唯有blue 和gray。

    models.table1.objects.create(col01='aa', col02='bb')

    models.Tb1.objects.filter(name__icontains="ven")  icontains不区分轻重缓急写

大家考虑3个主题素材,有时大家设置的门类也许会有转移,但是大家地方的代码并不能够实时的实行改造,若是那时大家修改HOST_TYPE元组,然后去刷新页面会开采select标签的数目未有改造。

在成立外键约束的时候,若是要利用钦命的字段作为外键,可以运用to_filed 来内定使用的列

<form action="/login/" method="post"></form>

修改后的代码为

python manage.py migrate

1部分多  和  多对多 用的比较多 

    models.Tb1.objects.filter(name='seven').order_by('-id')   # desc反序

    },

groupname

这一年就能出现1种状态

class myColor(models.Model):
    color = models.CharField(max_length=16)
class ball(models.Model):
    size = models.IntegerField()
    color = models.ForeignKey('myColor')  #生成的列名为 color_id

查询

    iendswith:    以钦命字符串结尾 ,不区分轻重缓急写

最早先的代码如下

id  user_table_id group_table_id

越来越多操作: 瞩目双下划线的行使

    models.Tb1.objects.filter(name='seven').order_by('id')   asc正序,默认

注意:

views/account.py

注意:

落到实处代码如下:(记得配置url)

views/account.py

rain    CTO

    models.Tb1.objects.all().values('id').annotate(c=Count('num'))

  获取全体数量

         依据id实行分组,并增添四个字段c 总括 num的个数

这边的error重返的是2个类别化的字典:

适用场景:

forms/account.py

咱俩先看代码

    models.table1.objects.all().values()  获取结果 每一条数据为贰个字典

创建models

CEO

在开始的时候我们写静态文件的门径的时候,写的门径都是一定的门径

     models.table1.objects.filter(name='seven')  可以行使字典,类似于扩展的第二种艺术

rain       16    

在付出表单的时候,譬喻,若是用户供给登陆,当用户输入密码错误的时候,大家是否亟需用户再一次输入一下用户名,没有要求用户重复输入用户名 的心得肯定越来越好有的。

    <form action="/upload/" method="post" enctype="multipart/form-data">
                                          # 上传文件时 需要设置 enctype
        <input type="file" name="myfile_name">
        <input type="submit" value="upload">
    </form>

django操作数据库都以透过models举行的,models 会自动帮我们闯将sql语句,所以大家不用关注底层使用的是哪一种数据库,无论是mysq依旧sqlite 只怕其余数据库,大家使用models就可以完结想要的操作。

    models.Tb1.objects.exclude(name__icontains="ven")  不带有操作

                'django.contrib.auth.context_processors.auth',

##########################################################################

首先 ,大家 写了1个 importForm 类,当大家实施 obj = HomeForm.importForm() 的时候,importForm被实例化, 在实例化的时候,会施行类的__init__方法 ,HOST_TYPE 属于类的静态字段,静态字段属于类且 加载到内部存款和储蓄器后就不在退换(静态字段只在第2次加载类的时候被实施,加载到内部存款和储蓄器后,四个实例能够共享类的静态字段),那么些类就被加载到了内部存款和储蓄器。 当大家修改HOST_TYPE的时候,类并不会 向内存中重新加载二回, 所以在我们实行了obj = HomeForm.importForm() 之后,大家刷新页面,并不会再一次执行该语句,而是从内部存款和储蓄器中读取已经存在的obj对象,数据也就不会转移。

  获取个数

CFO

  其他

修改

壹对1  施用的绝对来说少一些, 不过大家要明了叁者之间的界别 及 怎么着完结

  range操作

小插曲:上传文件

表2的color;列对应表一的id列

 

class myColor(models.Model):
    color = models.CharField(max_length=16)
class ball(models.Model):
    size = models.IntegerField()
    color = models.ForeignKey('myColor')

 

     obj = models.table1.objects.get(id=1)

创立数量:

    models.table1.objects.all().values_list()  获取结果为元组(每条数据为1个元组)

注意:

在shell中施行如下两句

有个别人属于多个组 ,各种组有多少人

class myColor(models.Model):
    color = models.CharField(max_length=16)
class ball(models.Model):
    size = models.IntegerField()
    color = models.OneToOneField('myColor')  #生成的列名为 color_id

    models.table一.objects.filter(name='seven').delete()还行字标准参数,类似于增添的第两种办法

views/home.py

models

跨表查询的时候,要求采纳双下划线 __

编辑:ca88 本文来源:CRM客户关系管理系统,python学习笔记

关键词: 亚洲城ca88