Django学习笔记 01


笔记参考资料  https://www.cnblogs.com/wupeiqi/articles/4938499.html  这是大神啊,资料总结很棒

ORM 

https://www.cnblogs.com/wupeiqi/articles/6216618.html

排序:

sql = BookInfo.bpm.all().order_by('-id','name') #倒叙id,如果有重复就使用name排序

打印SQL

print(sql.query)

分组 统计 加 筛选

BookInfo.object.values('class_id').annotate.(xxxx=Count('id')).filter(xxx_gt=2)

字段自加 F

from django.dbmodels import F
BookInfo.object.all().update(age=F('age')+1)

extra 使用

Entry.objects.extra(select={'new_id': "select col from sometable where othercol > %s"}, select_params=(1,))
Entry.objects.extra(where=['headline=%s'], params=['Lennon'])
Entry.objects.extra(where=["foo='a' OR bar = 'a'", "baz = 'a'"])
Entry.objects.extra(select={'new_id': "select id from tb where id > %s"}, select_params=(1,), order_by=['-nid'])

原生数据查询 切换数据库

from django.db import connection, connections
				
cursor = connection.cursor()         # connection=default数据
cursor = connections['db2'].cursor()         #切换数据库
        				
cursor.execute("""SELECT * from auth_user where id = %s""", [1])
        				
row = cursor.fetchone()
row = cursor.fetchall()

补充

models.py

from django.db import models

# Create your models here.

class UserInfo(models.Model):
    nickname = models.CharField(max_length=32)
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=32)
    gender_choices = (
        (1,'男'),
        (2,'女'),
    )

    gender = models.IntegerField(choices=gender_choices)


# 连表反向查询
'''
userinfo_set.all()


g = models.ForeignKey('UserIfo',related_query_name='a')
反向查 a_set.all()

g = models.ForeignKey('UserIfo',related_name='a')
反向查 a.all()

'''



class U2U(models.Model):
    g = models.ForeignKey('UserInfo',related_name='a',on_delete=models.CASCADE)
    b = models.ForeignKey('UserInfo',related_name='b',on_delete=models.CASCADE)



# 新闻评论
class New(models.Model):

    new_id = models.IntegerField() #新闻ID
    contemnt= models.CharField(max_length=64)   #评论内容
    user = models.IntegerField() #评论用户

    #自关联 只能评论已经评论过得
    reply = models.ForeignKey('New',null=True,blank=True)

views.py

from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.
from app01.models import U2U, UserInfo


def test(request):

    # 1. 插入数据
    '''
    # 第一种
    U2U.objects.create(b_id=3,g_id=1)

    # 第二种
    boy = UserInfo.objects.filter(gender=2,id=2).first()
    girl = UserInfo.objects.filter(gender=1,id=4).first()
    U2U.objects.create(b=boy,g=girl)
    '''
    # 2. 查数据

    xz = UserInfo.objects.get(pk=1)
    print(xz.nickname)

    result = xz.a.all()
    for re in result:
        print(re.g.nickname)

    print(result)
    return HttpResponse('test')

表单验证

from django.views.decorators.csrf import csrf_protect
# 局部验证  注释 MIDDLEWARE 里 第四行
@csrf_protect
def post(request):
    pass
<form action="app/post" method="post">
    {% csrf_token %}
    name: <input type="text" name="name"> <br>
    age: <input type="number" name="age">
    <br>
    <input type="submit">

</form>
  {% csrf_token %}
# 局部验证 注释 MIDDLEWARE 里 第四行
@csrf_protect
def post(request):
    pass


# 手动建表 love 批量添加数据
def insert(request):

    ''' 创建数据 '''
    objs = [
        Boy(name='方大爷'),
        Boy(name='李大爷'),
        Boy(name='王大爷'),
        Boy(name='赵大爷'),
    ]

    Boy.objects.bulk_create(objs,4)

    objs2 = [
        Girl(nick='方姑姑'),
        Girl(nick='李姑姑'),
        Girl(nick='王姑姑'),
        Girl(nick='赵姑姑'),
    ]

    Girl.objects.bulk_create(objs2, 4)


    # 关系表
    '''
    Love.objects.create(b_id=11,g_id=2)
    Love.objects.create(b_id=11,g_id=1)
    Love.objects.create(b_id=12,g_id=3)
    Love.objects.create(b_id=12,g_id=4)
    '''

    # 和 方大爷 有关系的姑姑

    # obj = Boy.objects.get(name='方大爷')
    # love_list = obj.love_set.all()
    # print('-----------')
    # print(love_list.query)
    # print('-----------')
    # for list in love_list:
    #     print(list.g.nick)

    # love_list = Love.objects.filter(b__name='方大爷')
    # print('-----------')
    # print(love_list.query)
    # print('-----------')
    # for list in love_list:
    #     print(list.g.nick)

    # love_list = Love.objects.filter(b__name='方大爷').values('g__nick')   #g__nick固定写法
    # print('-----------')
    # print(love_list.query)
    # print('-----------')
    # for list in love_list:
    #     print(list['g__nick'])

    # love_list = Love.objects.filter(b__name='方大爷').select_related('g')
    # print('-----------')
    # print(love_list.query)
    # print('-----------')
    # for list in love_list:
    #     print(list.g.nick)


    return HttpResponse('添加')

# 自动表 操作 app_boy_m
def insBoyM(request):
    boy = Boy.objects.filter(name='方大爷').first()
    print(boy.id,boy.name)
    # 添加数据到 boy_m
    # boy.m.add(4)
    # boy.m.add(1,4)
    # boy.m.add(*[2,])

    # 删除
    # boy.m.remove(1)
    # boy.m.remove(1,4)
    # boy.m.remove(*[2,])

    # 更新

    boy.m.set([1,]) #全部重置

    # 获取
    bb = boy.m.all()  #获取到的是  girl
    print(bb)

    gg = boy.m.filter(nick='方姑姑').first()

    # 删除 所有关于 方大爷的数据

    boy.m.clear()

    print(gg.id)


    return HttpResponse('自动建表 男 操作')

# 自动表 操作 app_boy_m
def insGirlM(request):
    girl = Girl.objects.filter(nick='方姑姑').first()

    boys = girl.boy_set.all()

    print(boys)

    for g in boys:
        print(g.id,g.name)

    return HttpResponse('自动建表 女 操作')

代码文件  

wu01.zip


字段

from django.db import models

# Create your models here.


class CodeField(models.Model):
    # str
    zhanghao  = models.CharField(max_length=10,unique=True) #账号
    ip = models.GenericIPAddressField(max_length=20)       #ip
    url = models.URLField(max_length=20)     #url
    slug = models.SlugField(max_length=20)       #url
    uuid = models.UUIDField(max_length=20)
    filePath = models.FilePathField()
    file = models.FileField()
    img = models.ImageField()
    # comm = models.CommaSeparatedIntegerField()
    # time
    dateTime = models.DateTimeField()
    # int
    int = models.ImageField()
    float = models.FloatField()
    decimal = models.DecimalField(max_digits=30,decimal_places=10)
    # 枚举
    color_list = (
        (1, '黑色'),
        (2, '白色'),
        (3, '蓝色')
    )
    color = models.IntegerField(choices=color_list)

# 参数
class Parameter(models.Model):
    user  = models.CharField(
        max_length=20,
        verbose_name='用户名',
    )
    email = models.EmailField(
        null=True, #字段可以为空
        blank=True, #Admin中是否允许用户输入为空
        verbose_name='邮箱',
        unique=True,
        help_text='1313',
    )
    sex = models.IntegerField(
        blank=False,
        choices=[
            (0,'请选择性别'),
            (1,'男'),
            (2,'女'),
        ],
        default=0,
        verbose_name='性别',

    )



---------------------
作者:前世的我
来源:前世的我
原文:http://www.w55.site/blog/article/look/id/26.html
版权声明:本文为博主原创文章,转载请附上博文链接!