Добрый день! Подскажите пожалуйста , как можно реализовать в Django сл. задачу.
Есть например модель A c некоторым полем dataA
и методом printdata, и есть наследник B (их может быть много):
class A(models.Model):
dataA = models.IntegerField()
def printdata(self):
print self.dataA
class B(A):
dataB = models.IntegerField()
def printdata(self):
print self.dataA + self.dataB
Как сделать функцию printdata виртуальной.
например:
b = B()
b.dataA = 10
b.dataB = 10
b.save()
a = A.objects.get(id = 1)
a.printdata() # здесь происходит вызов A.printdata, а нужен B.printdata
ps Если использовать абстрактную модель те через класс Meta сделать
модель абстрактоной. Тогда возникает другая проблема, связанная с
тем, что на абстрактную модель нельзя создавать ключей.
Например:
class A(models.Model):
dataA = models.IntegerField()
def printdata(self):
print self.dataA
class Meta:
abstract = True
class B(A):
dataB = models.IntegerField()
def printdata(self):
print self.dataA + self.dataB
class C(models.Model):
a = models.ForeignKey(A) # Так делать нельзя!
Ответ на:
комментарий
от true_admin
Ответ на:
комментарий
от aalek
Ответ на:
комментарий
от true_admin
Ответ на:
комментарий
от aalek
Ответ на:
комментарий
от provaton
Ответ на:
комментарий
от aalek
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Кто может подсказать причину ошибки Django (2024)
- Форум Django annotate c условием (2009)
- Форум Django и удаление связанных полей (2014)
- Форум django кеширование (2020)
- Форум можно ли «отвязать» друг от друга 2 объекта (ManytoMany в модели) (2018)
- Форум [Django] автоматические создание внешних ключей (2012)
- Форум Получение всех объектов наследованных от meta класса (2014)
- Форум ManyToMany ссылка (2012)
- Форум One or more models did not validate (2015)
- Форум admin.ModelAdmin свое сохранение модели (2012)