Django的Web开发——models的继承

Django中的模型是可以继承的

默认的继承是在主模型中生成id及主模型字段,这样的关系特别复杂,父类里数据量也会很庞大,效率低

model.py

migrate后,会生成三张表,然后cat、dog 都外键关联Animal表

class Animal(models.Model):
    a_name=models.CharField(max_length=20)

class Cat(Animal):
    c_eat=models.CharField(max_length=20)

class Dog(Animal):
    d_like=models.CharField(max_length=20)

views.py

此时添加的数据,会同步在animal表中生成a_name,

def add_cat(request):
    cat=Cat()
    cat.c_eat='爱吃鱼'
    cat.a_name='Tom'
    cat.save()
    return HttpResponse('猫添加成功')

def add_dog(request):
    dog=Dog()
    dog.d_like='爱叫唤'
    dog.a_name='Poy'
    dog.save()
    return HttpResponse('狗添加成功')

使用元信息,将模型抽象化,这样模型之间没有映射,而只是继承父模型的字段

class Animal(models.Model):
    a_name=models.CharField(max_length=20)

    # 用元信息将模型抽象化
    class Meta:
        abstract= True



class Cat(Animal):
    c_eat=models.CharField(max_length=20)

class Dog(Animal):
    d_like=models.CharField(max_length=20)

此时只会建立两张表, 都带有a_name的字段,且相互独立,无外键关联。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值