Django Models 常用操作及问题解决
model.XXX.objects.get()不存在字段解决方案
如何判断从表单发送过来的用户名及密码是否在数据库中存在?
使用model.User.objects.get(username = username)的时候如果不存在查询的值的话将会抛出一个DoesNotExist的异常
可以使用try捕获此异常进行判断:
from django.core.exceptions import ObjectDoesNotExist
if request.method == 'POST':username = request.POST.get('username')passwd = mainHandle.getMd5(request.POST.get('passwd'))try:result = models.Admin.objects.get(username = username, passwd = passwd)pageObj = redirect('/admin/manage/')pageObj.set_signed_cookie('ck','log',salt = 'ck_liang')return pageObjexcept ObjectDoesNotExist:....
批量插入数据
models.Class.objects.bulk_create([models.Class(cname = 'python'),models.Class(cname = 'java'),models.Class(cname = 'html5'),models.Class(cname = 'php'),models.Class(cname = 'django'),models.Class(cname = 'javascript'),])
teacherClass = []
for nameId in newCnameId:teacherClass.append(models.TeacherClass(tid_id = tid, cid_id = nameId))
models.TeacherClass.objects.bulk_create(teacherClass)
多表联查
tList = A.objects.filter(name = 'admin').values_list('name','age', flat=True) # flat = True 返回一个列表,默认返回元组列表
B.objects.filter(name__in=tList).values_list('class')
通过外键多表联查
teacher和class表通过中间表关联,并且为中间表设置外键
class Teacher(models.Model):tid = models.AutoField(primary_key = True)tname = models.CharField(max_length = 5)class Class(models.Model):cid = models.AutoField(primary_key = True)cname = models.CharField(max_length = 15)class TeacherClass(models.Model):tcid = models.AutoField(primary_key = True)tid = models.ForeignKey(Teacher)cid = models.ForeignKey(Class)
通过中间表的外键正向查询
obj = models.TeacherClass.objects.filter(cid_id = 5) # 返回QuerySet对象列表for row in obj:print(row.tid.tname) # 通过当前表的外键字段正向查找cid_id = 5的教师表中的教师姓名
反向查询
obj = models.Teacher.objects.get(tid = 4) # 返回QuerySet对象列表for row in obj.teacherclass_set.all(): # 反向查找的表名需全部小写并加上_setprint(row.cid_id)
values()取值时的正向跨表查询 - (外键名__字段名)
obj = models.TeacherClass.objects.filter(tid_id = 5).values('cid_id','tid__tname') # 返回字典
print(obj)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
