model的继承及问题

1、数据库优化问题

1、尽量避免表关联---数据操作效率低
2、尽量的避免io(读写)

2、问题

	在Django中,model可以使用继承,即子类可以继承父类,默认情况下,继承之后,使用迁移创建数据库表之后,默认会创建一个父类表,也会创建子类表,但是子类表中继承的父类的属性,不会在子类表中,而是通过外键关联父类表获得。
	默认情况不合理,应该子类是一个独立的表,避免表关联。

3、解决

	将父类model定义成抽象的类即可
	如:在父model中添加
	class Meta:
		abstract  = True
	使得model抽象化,不能实例化,继承的子模型就不会再关联父表,子模型会是独立的表,且会继承父类的模型的属性。

4、例

from django.db import models
# Create your models here.

# 定义一个动物类
class Animal(models.Model):

    a_name = models.CharField(max_length=50)

    a_leg_num= models.IntegerField(default=4)

    #使得model抽象华.不能实例化, 继承的子模型就不会在关联父表,子模型会是独立的表

    class Meta:

        abstract  = True


# 狗---继承与animal

class Dog(Animal):

    d_food = models.CharField(max_length=50)


# 猫 --- 继承与animal
class Cat(Animal):

    c_food = models.CharField(max_length=50)

5、迁移问题

	迁移的时候,可能会因为迁移文件已经有对应的迁移记录,而是的迁移失败
	解决:
		1、删除对应的表(小心操作)
		2、在django-migrations表中删除对应的记录
		2、删除migrations目录下的迁移文件
		4、再次重新迁移即可

6、注意

删除操作数据库中的数据时,要格外小心,如果不小心误删了数据库,赶紧跑,别回头...
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值