增删改查基本指令
#1.增
Model.objects.create(**kwargs)
obj = Model()
obj.filed = XXX
obj.save()
#2.查
Model.objects.all()
#3.改
m = Model.objects.get(id=1)
m.name = 'new_name'
m.save()
#4.删
m = Model.objects.get(id=1)
m.delete()
增删改查实操
#进入脚本环境
(hulishuju_env) E:\website\server\hulishuju>python manage.py shell
#导入模型
>>> from homepage.models import member
####增
#分布插入
>>> m = member(gender = 'MALE', name_id = 'hahala', password='jiuming', phone='13245664356')
>>> m.save()
#一步插入
>>> p = member.objects.create(gender = 'MALE', name_id = 'sunwukong', password='jiuming', phone='1324566435')
####查
#all()全部查询 get()单一查询 filter()满足 和 exclude() 排除
>>> all_entries = member.objects.all().filter(id=1) #包括id=1的 所有条目信息
>>> all_entries = member.objects.all().exclude(id=1) #排除id=1的 所有条目信息
>>> all_entries = member.objects.all().exclude(id=1).filter(id=3) # 混合用法
#filter需满足的条件 exclude不满足的条件
>>> q1 = Entry.objects.filter(headline__startswith="What")
>>> q2 = q1.filter(pub_date__lte=datetime.date.today())
>>> q3 = q2.exclude(body_text__icontains="food")
>>> print(q3)
#返回的是一个queryset结果集 无法直接使用 若仅需取出一条数据 使用Get
>>> resourlt1 = user_base_info.objects.get(id=1)
>>> print(resourlt1.website_addr)
#若需要使用结果集
>>> for e in resourlt1:
... print(e.website_addr)
#多条件查询 id 大于4 小于1
>>> result = member.objects.filter(id__gt=4).exclude(id__lt=1)
#限制条目查询
>>> result = member.objects.all()[5:10]
>>> result = member.objects.all()[:10]
>>> result = member.objects.all()[5:]
#确认条目数
>>> result = len(member.objects.all())
#排序
>>> print(member.objects.all().order_by('name_id')) 升序
>>> print(member.objects.all().order_by('-name_id')) 降序
####改
>>> m = member.objects.get(id=2)
>>> m.website_addr = '18664368576'
>>> m.save()
####删
>>> m = member.objects.get(id=1)
>>> m.delete()
shell 中外键关联访问 一对多 foreignkey
#模型中字段如下
#主表名 UserProfile 在应用 user下
#子表名 datatime_log 在应用 treatment_record 下
#子表中外键字段
userid = models.ForeignKey('user.UserProfile',on_delete=models.CASCADE,verbose_name=u'用户id');
#导入数据表
>>> from treatment_record.models import datatime_log
>>> from user.models import UserProfile
##### 反向操作 即一对多 主表到子表
# 从主表中拿到对象 get(id=1) get(username='w******7') 都可以
uid = UserProfile.objects.get(id=1)
# 主表中都有一个 子表_set 的对象可以调用
# 也可以在子表外键字段自定义属性 related_name='entries' 访问 uid.entries.all()即可
# userid = models.ForeignKey('user.UserProfile',on_delete=models.CASCADE,related_name='entries',verbose_name=u'用户id');
uid.datatime_log_set.all()
##### 正向操作 即多到一 子表到主表
# 得到子表对象
# userinfo = datatime_log.objects.get(id=8)
# 以外键字段访问主表 得到对象后进行先关操作
# userinfo.userid
密码字段函数
#引入模块
from django.contrib.auth.hashers import make_password, check_password
#制作一个密码
password = make_password(password,salt=None, hasher='default');
#验证密码
check_password("需要验证的密码","makepassword生成的编码");
动态修改查询条件
#动态查询语句
kwargs = {
"userid" : uid,
}
#增加字典字段
if request.GET['year']:
kwargs["datetime__year"] = request.GET['year']
if request.GET['month']:
kwargs["datetime__month"] = request.GET['month']
#放入查询
datatime_log.objects.filter(**kwargs)