Для расширенной информации, должен ли я использовать многотабличное наследование Django или явное OneToOneField - PullRequest
2 голосов
/ 23 сентября 2011

У меня есть некоторые поля в модели, которые не всегда будут заполняться (например, фактическая дата завершения и затраты до завершения проекта).По этой причине я решил разделить модель на две части:

  1. Модель # 1 : плотная таблица, содержащая часто просматриваемые и всегда заполненные поля
  2. Модель # 2 : разреженная таблица, содержащая редко просматриваемые и не всегда заполненные поля

Вопросы

  1. Правильно ли я думаю, разделив это на две модели / таблицы?
  2. Должен ли я использовать Django Multi-table Inheritance, или я должен явно определить OneToOneField?Почему?

Конфигурация

  • Версия Django 1.3.1

Модели

Использование многостолового наследования Django

class Project(models.Model):
    project_number = models.SlugField(max_length=5, blank=False,
            primary_key=True)
    budgeted_costs = models.DecimalField(max_digits=10, decimal_places=2)

class ProjectExtendedInformation(Project):
    submitted_on = models.DateField(auto_now_add=True)
    actual_completion_date = models.DateField(blank=True, null=True)
    actual_project_costs = models.DecimalField(max_digits=10, decimal_places=2,
            blank=True, null=True)

Использование явного OneToOneField

class Project(models.Model):
    project_number = models.SlugField(max_length=5, blank=False,
            primary_key=True)
    budgeted_costs = models.DecimalField(max_digits=10, decimal_places=2)

class ProjectExtendedInformation(models.Model):
    project = models.OneToOneField(CapExProject, primary_key=True)
    submitted_on = models.DateField(auto_now_add=True)
    actual_completion_date = models.DateField(blank=True, null=True)
    actual_project_costs = models.DecimalField(max_digits=10, decimal_places=2,
            blank=True, null=True)

1 Ответ

2 голосов
/ 14 октября 2011

Вы по существу имеете дело с яблоками и яблоками здесь.Реализация Django MTI (многостоловое наследование) использует неявное OneToOneField.

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