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>
...
[
2
Согласно 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
<
