WHCSRL 技术网

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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('狗添加成功')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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

推荐阅读