Джанго: запрос абстрактного базового класса - PullRequest
5 голосов
/ 24 июля 2011

У меня есть ситуация, когда я моделирую футбольный матч, и каждый матч имеет ряд событий, связанных с ним, которые связаны с тем, что происходило во время игры.Так что-то вроде этого:

class Event(models.Model):
    time = models.IntegerField()
    class Meta:
        abstract = True

class Goal(Event):
    scorer = models.ForeignKey('Player')

class PitchInvasion(Event):
    number_of_people = models.IntegerField()

class FootballMatch(models.Model):
    events = models.ForeignKey('Event')

Простите за надуманный пример, но он показывает, что эти подклассы Event могут быть чем угодно.Затем я хочу уметь запрашивать все эти события и заказывать их вовремя, чтобы получить хронологическое представление о том, что произошло в этом матче.

Однако, с abstract = True, Eventобъекты заканчиваются на pitchinvasion_set, goal_set и так далее,.Будет ли это решено установкой abstract = False и использованием конкретного наследования?Я читал, что делать это - - плохая идея, так как он вводит дополнительное соединение .

Какой лучший способ справиться с подобными ситуациями?

1 Ответ

2 голосов
/ 25 июля 2011

Я согласен с комментарием Питера Роуэлла - наследование модели не то, о чем вы думаете, и, на мой взгляд, очень редко полезно..Таким образом, у вас была бы модель Match с events = GenericRelation(), и каждый из типов событий имеет GenericForeignKey обратно в соответствие.Тогда вы можете сделать match.events.all() и получить все отдельные события для этого совпадения.

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

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