django框架之13:外键约束

外键和表关系

在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam。如果使用的是InnoDB引擎,是支持外键约束的。外键的存在使得ORM框架在处理表关系的时候异常的强大。因此这里我们首先来介绍下外键在Django中的使用时需要设置引擎为innodb。
类定义为class ForeignKey(to,on_delete,**options)。第一个参数是引用的是哪个模型,第二个参数是在使用外键引用的模型数据被删除了,这个字段该如何处理,比如有CASCADE、SET_NULL等。这里以一个实际案例来说明。比如有一个Category和一个Article两个模型。一个Category可以有多个文章,一个Article只能有一个Category,并且通过外键进行引用。

在哪里定义外键?

对于一对多的关系,如一个图书馆分类在武侠小说的类中含有多本小说,而每一本小说只能在一个分类中(图书馆的真实场景,虚拟书属于多对多,以后讨论)
一条武侠小说数据只能有一个分类,可以在这里建外键,连接到对应的分类,而一个分类含有太多的武侠小说,所以不能建多个外键,结论:建外键在“多”中。

定义方式

models:


from django.db import models

# Create your models here.
class Category(models.Model):
    name = models.CharField(max_length=20)

class Article(models.Model):
    title = models.CharField(max_length=20)
    content = models.TextField()
    category = models.ForeignKey('Category',on_delete=models.CASCADE)
  • 注:CASCADE级联删除,如果外键对应的那条数据被删除了,那么这条数据也会被删除。
  • 一个category可以有多篇文章,但是一个article只能在一个category,删除了这个分类,这篇文章也被删
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
from .models import Category,Article

def news(request):
    # 保存数据
    # category = Category(name='言情')
    # category.save()
    # article = Article(title='金瓶梅',content='韦小宝和他的七个老婆')
    # # #article.category_id = category #这样不行
    # article.category = category
    # article.save()
    article = Article.objects.get(pk=2)
    print(article.category.name)
    return HttpResponse('news操作成功')

拆分代码:
生成数据:

    category = Category(name='言情')
    category.save()
    article = Article(title='金瓶梅',content='韦小宝和他的七个老婆')
    # article.category_id = category #这样不行
    article.category = category
    article.save()

查询数据,打印名字:

    article = Article.objects.get(pk=2)
    print(article.category.name)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值