[python 学习笔记] 从头开始创建一个django项目19 - 通过model反向去外键关联数据

* 注意, 当在models.py中添加了字段后,必须要执行migration 和 migrate

外键:在两个表中存在一个共同的字段,且这个字段是其中一张表的主键,此时这个字段称为另一张表的外键。

比如,教育机构和课程两张表,两张表中都存在教育机构这个字段,且教育机构为教育机构表的主键,此时教育机构这个字段就是课程表的外键。一个教育机构可以对应多个课程,这个一对多的关系。同理,还可能存在一对一的关系。

而多对多的关系,则只能通过两个一对多关系实现。

在课程表中,定义外键‘教育机构’:

class Course(BaseModel):
    course_org = models.ForeignKey(CourseOrg, null=True, blank=True, on_delete=models.CASCADE, verbose_name='课程机构')

在教育机构表中, 定义一个方法,用于取得每个教育机构对应的课程。

取得方式有两种,一种需要import Course类,而另一种,则可以直接通过django中的方法取得课程

class CourseOrg(BaseModel):
   ...

    # 取得每个课程机构对应的课程, 已经在课程modules中添加外键课程机构
    def courses(self):
        # 添加外键的第一种方式
        # from apps.courses.models import Course
        # courses = Course.objects.filter(course_org=self)

        # 添加外键的第二种方式,不用import,[:3]表示只取3个经典课程
        courses = self.course_set.filter(is_classics=True)[:3]

        return courses

将course信息显示到前端页面,org.courses调用courses方法

 <ul class="cont">
    <li class="first"><p class="pic9">课程数:<span>{{org.course_nums}}</span></p><p class="c7">学习人数:<span>{{org.students}}</span></p></li>
    <li class="c8" style="padding-left:18px;">{{org.address}}</li>
    <li class="pic10" style="padding-left:18px;">经典课程:
    {% if org.courses%}
     {% for course in org.courses %}
     <a href="/diary/19/">{{course.name}}</a>
     {% endfor %}
     {% else %}
     无
     {% endif %}
    </li>
</ul>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值