1 添加 班级信息时的问题 (grade为外键)
原因是 grade 必需接收 一个 实例,
而我交是一个 str字符串,
if request.method == 'POST': data = { 'name': request.POST.get('name', ''), 'sex': request.POST.get('sex'), 'age': request.POST.get('age'), 'qq': request.POST.get('qq'), 'phone': request.POST.get('qq'), 'grade': request.POST.get('grade') # XXXX 字符串 } student = Student(**data) student.save()
修改为:
'grade': Grade.objects.filter(pk = request.POST.get('grade')) 返回一个查询集,还是一行 需要接受一个 "实例"对象
加了一个.first() 后 正常...
下面有常用查询 和返回的类型.
'grade': Grade.objects.filter(pk = request.POST.get('grade')).first()
3.常用查询
通过模型类上的管理器来构造QuerySet。 - 模型类上的管理器是啥? 模型类.objects - QuerySet 表示数据库中对象的集合。 等同于select 语句。 惰性的案例: - first() 获取第一条 返回的是对象 - last() 获取最后一条 返回的也是一个对象 思考:排序规则? 默认通过主键。通过_meta 设置 - get(**kwargs) 根据给定的条件,获取一个对象,如果有多个对象符合,保存 - all() 获取所有记录 返回的是queryset - filter(**kwargs) 根据给定的条件,获取一个过滤后的queryset,多个条件使用and连接。 - exclude(**kwargs) 跟filter使用方法一致,作用想反,它是排除。 - 多条件的OR连接 用到Q对象,django.db.models.Q - values(*fields) 返回一个queryset,返回一个字典列表,而不是数据对象。 - only(*fiels) 返回querySet ,对象列表,注意only一定包含主键字段 - defer(*fields) 返回一个QuerySet,作用和only相反 - order_by(*fields) 根据给定的字段来排序 默认是顺序,字段名前加上 ‘-’代表反序 - 切片 和python的列表切片用法相似,不支持负索引,数据量大时不用步长 *** 切片过后,不再支持,附加过滤条件与排序
问题 2 性别 : request.POST.get('sex')
传的值 是on,不是 1或 0
原因 是 checked 值没写...
光看老师写了...没加这个字段...
class StudentDetail(models.Model): high = models.SmallIntegerField(verbose_name='身高',default=0) weight = models.SmallIntegerField(verbose_name='体重',default=0) introduction = models.TextField(verbose_name='简介',default='') num = models.CharField('身份证号码', max_length=20,default='', unique=True,null=True) #补加一下. student = models.OneToOneField('Student',on_delete=models.CASCADE)
找到 url ...
app_name : 视图名,不能空格.