Class Based View - поля не создаются в базе данных (python Inherits\django cbv)

Я пытаюсь создать модель наследования, следуя этому руководству: https://www.digitalocean.com/community/tutorials/understanding-class-inheritance-in-python-3

Все работает. Можно получить доступ к свойству FirstName в дочернем и показать в представлении, но когда я запускаю makemigration/migrate, наследуемые поля не создаются в таблице в базе данных. (core-shark / core-trout)

Что я могу делать неправильно? Возможно ли, используя наследование в питоне и CBV, создать поля в базе данных с помощью makemigration/migrate? Спасибо заранее

model.py

class Fish(models.Model):
    def __init__(self, first_name, last_name="Fish"):
        self.first_name = first_name
        self.last_name = last_name

    def swim(self):
        print("The fish is swimming.")

    def swim_backwards(self):
        print("The fish can swim backwards.")

    class Meta:
        verbose_name = 'Fish'
        abstract = True     
        
    def __str__(self):
        return self.first_name


class Shark(Fish):
    def __init__(self, first_name, last_name="Shark", skeleton="cartilage", eyelids=True):
        self.first_name = first_name
        self.last_name = last_name
        self.skeleton = skeleton
        self.eyelids = eyelids

    def swim_backwards(self):
        print("The shark cannot swim backwards, but can sink backwards.")


class Trout(Fish):
    def __init__(self, water ='', price = 0):
        self.water = water
        self.price = price
        super().__init__(self)

    class Meta:
        verbose_name = 'Trout'

view.py

class IndexView(TemplateView):
    template_name = 'index.html'

    def get_context_data(self, **kwargs):

        context = super(IndexView, self).get_context_data(**kwargs)      
        sammy = Shark("Sammy")
        terry = Trout()
        terry.first_name = "Terry"

        context['sammy'] = sammy
        context['terry'] = terry
 
        return context

index.html

...
<body style="color:red">
    <h1>Fish Name: {{sammy.first_name}}</h1>
    <h1>Fish Name: {{terry.first_name}}</h1>
</body>
...

INDEX.HTML showing inherited field

[mysql create only id default field2

проект git

Согласно Django Documentation for Models, вам нужно определить поля базы данных как атрибуты класса.

I.o.w:

class Fish (models.Model):
    
    first_name = models.CharField(max_length=64)
    last_name = models.CharField(max_length=64)
    
    def __init__(self, first_name, last_name="Fish"):
        self.first_name = first_name
        self.last_name  = last_name
<
Вернуться на верх