Django 学生信息 添加 功能 遇到的问题.

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 : 视图名,不能空格.

 

posted on 2019-03-05 18:09  卓达  阅读(214)  评论(0编辑  收藏  举报

导航