Django中的数据库模型类-models.py(一对多的关系)

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.

# 一对多数据关系
# 一对多关系是通过在子表中设置父表的外键引用来完成关联
# 父表的一个数据对应着子表的多个数据
# 例子:班级和学生

class Classes(models.Model):
    id = models.AutoField(primary_key=True,verbose_name=u'主键')
    name = models.CharField(max_length=10,null=True,blank=True,verbose_name=u'班级名称')
    num = models.IntegerField(null=True,blank=True,verbose_name=u'班级人数')

    class Meta:
        db_table = 'classes'

    def __unicode__(self):
        return 'classname:%s|classnum:%s'%(self.name,self.num)


class Student(models.Model):
    id = models.AutoField(primary_key=True,verbose_name=u'主键')
    # 关联主表(父表),设置外键
    classes = models.ForeignKey(Classes,on_delete=models.CASCADE,verbose_name=u'外键')
    name = models.CharField(max_length=20,null=True,blank=True,verbose_name=u'学生的姓名')
    age = models.IntegerField(null=True,blank=True,verbose_name=u'学生的年龄')

    class Meta:
        db_table = 'student'

    def __unicode__(self):
        return 'studentname:%s|studentage:%s'%(self.name,self.age)

# 从子表中查询父表中的数据
# s1.classes.num //查询学生所在班级的总人数
# s1.classes.name //查询学生所在班级的名称

# 从父表中查询子表的相关数据
# 1>查询一个班级的所有学生,通过student_set属性查询
# print c1.student_set.all()
# 2>filter:根据条件,去结果集中进行匹配查询
# print c1.student_set.filter(name='lisi')
# 3>get:根据条件,去结果集中匹配查询
# print c1.student_set.get(name='lisi')

# XXX_set:Django提供的用于通过主模型(父表)对象,访问子模型(子表)对象集合的属性名


'''
get()filter()的区别:
get():只能查询出一个结果,如果查询结果不止一个,那么使用get()方法会报错;
filter()可以根据条件,匹配一组结果,得到一个结果集;

'''



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值