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 pageObj
		except 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(): # 反向查找的表名需全部小写并加上_set
		print(row.cid_id)

values()取值时的正向跨表查询 - (外键名__字段名)

obj = models.TeacherClass.objects.filter(tid_id = 5).values('cid_id','tid__tname') # 返回字典
print(obj)

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值