Модели Django.Суперкласс модели

#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)