Модели Django - много классов против нескольких классов? Работа с отношениями "не совсем наследование" - PullRequest
2 голосов
/ 01 ноября 2009

У меня есть довольно общая модель:

class Keyword(models.Model):
    ancestors = models.ManyToManyField(Keyword)
    name = models.CharField()
    description = models.CharField()

Проблема в том, что у меня есть несколько разных типов ключевых слов, которые имеют разные формы бизнес-логики. Некоторым, например, никогда не разрешают иметь каких-либо предков. Другие никогда не могут быть предками.

Это становится более сложным, но основной вопрос заключается в следующем: я могу создать плоский класс и, возможно, использовать тип enum, но тогда я не уверен, как бы я обеспечил, чтобы, например, предки могли иметь определенный тип. Или я мог бы создать иерархию классов, но тогда я бы не смог сделать что-то вроде models.ManyToManyField (Keyword), потому что мне нужно было бы включить несколько типов.

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

1 Ответ

1 голос
/ 01 ноября 2009

Я думаю, вы описываете наследование одной таблицы . В настоящее время он не поддерживается в Django.

Из поддерживаемых опций я рекомендую использовать Модели прокси и применять ограничения, специфичные для класса, путем проверки в перегруженных save() методах подклассов.

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