Возможно ли в Django наследовать несколько абстрактных базовых классов? - PullRequest
3 голосов
/ 19 января 2012

Я пытаюсь создать простой планировщик событий для моего кампуса в качестве упражнения во время изучения Django. Я хочу определить событие , которое можно однозначно идентифицировать как набор место проведения , динамик и дата . Моя первая попытка сделать это, используя наследование от нескольких абстрактных базовых классов. Я все еще новичок в кодировании, поэтому я не уверен, правильно ли я это делаю. Есть ли лучший способ сделать то же самое?

Вот мой первый подход. Создайте абстрактные классы для каждого места проведения, докладчика, даты, а затем наследуйте их в классе, называемом событием. Я хочу сделать так, потому что одни и те же места и колонки будут использоваться снова и снова.

Другим подходом может быть такой, но он не очень хорошо работает с площадками и колонками, которые многократно используются:

class Event(models.Model):
    speaker=models.CharField(max_length=100)
    venue=models.CharField(max_length=400)
        date=models.DateTimeField('Event begins at')
    def __unicode__(self):
        return self.question

(Я также не знаю всех методов работы с базами данных.)

Итак, возможно ли создать один класс, который наследуется от нескольких абстрактных классов?

1 Ответ

3 голосов
/ 19 января 2012

(a) Вы можете иметь несколько абстрактных базовых классов.

(b) Если вам просто нужно собрать методы, вам не нужно, чтобы эти базовые классы были подклассами Model.

(c) Ваше событие не должно наследоваться от докладчика и т. Д., Если вы не хотите, чтобы оно по отдельности содержало все элементы данных и все функциональные возможности этих базовых классов. Вместо этого он должен иметь ForeignKey (или одно из других подобных полей) для экземпляра каждого из этих классов. Вы должны использовать композицию, когда вам нужно собрать данные вместе; Вы должны использовать наследование только тогда, когда вам нужно настроить поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...