#python #django
#python #django
Вопрос:
Я хотел бы создать модели.Класс модели, который не стал частью базы данных, а просто интерфейсом к другим моделям (я хочу избежать повторения кода).
Что-то вроде этого:
class Interface(models.Model):
a = models.IntegerField()
b = models.TextField()
class Foo(Interface):
c = models.IntegerField()
class Bar(Interface):
d = models.CharField(max_length='255')
Таким образом, моя база данных должна иметь только Foo (со столбцами a, b, c) и Bar (с a, b, d), но не интерфейс таблицы.
Ответ №1:
Абстрактные базовые классы полезны, когда вы хотите поместить некоторую общую информацию в ряд других моделей. Вы пишете свой базовый класс и добавляете
abstract=True
мета-класс. Тогда эта модель не будет использоваться для создания какой-либо таблицы базы данных. Вместо этого, когда он используется в качестве базового класса для других моделей, его поля будут добавлены к полям дочернего класса.
Комментарии:
1. Я думал, что это будет что-то подобное, но с
abc
модулем. Я попробую. Спасибо
Ответ №2:
Вы можете определить свои классы следующим образом:
from django.db import models
class CommonInfo(models.Model):
name = models.CharField(max_length=100)
age = models.PositiveIntegerField()
class Meta:
abstract = True
class Student(CommonInfo):
home_group = models.CharField(max_length=5)