Модели Django. Модельный суперкласс - PullRequest
4 голосов
/ 02 октября 2011

Я хотел бы создать класс models.Model, который не стал частью базы данных, а просто интерфейсом для других моделей (я хочу избежать повторения кода).*

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), но не интерфейс таблицы.

Ответы [ 2 ]

10 голосов
/ 02 октября 2011

"Абстрактные базовые классы"

Абстрактные базовые классы полезны, когда вы хотите поместить некоторую общую информацию в ряд других моделей.Вы пишете свой базовый класс и помещаете abstract=True в мета-класс.Эта модель не будет использоваться для создания таблицы базы данных.Вместо этого, когда он используется в качестве базового класса для других моделей, его поля будут добавлены к полям дочернего класса.

1 голос
/ 13 июля 2016

Вы можете определить свои классы так:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...