Модели Django: Наследование и преемственность предков

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

  • Dj Версия: Django 1.7
  • Py Версия: Python 3.4.2

Сообщение

$ python manage.py makemigrations 
 You are trying to add a non-nullable field 'businessentity_ptr' to business without a default; we can't do that (the database needs something to populate existing rows). Please select a fix: 1) Provide a one-off default now (will be set on all existing rows) 2) Quit, and let me add a default in models.py 

Models.py

 class BusinessEntity(models.Model): title = models.CharField(max_length=180) def __str__(self): return self.title class Business(BusinessEntity): description = models.TextField(max_length=600) claimed = models.BooleanField(default=False) slug = models.SlugField() timestamp = models.DateTimeField(auto_now_add=True, auto_now=False) updated = models.DateTimeField(auto_now_add=False, auto_now=True) def __str__(self): return self.description 

То, что я пробовал, (которого все будут ненавидеть):

  1. Удаление DB & Re-migrating
  2. установка значения по умолчанию для всех полей
  3. Установка всех полей в null = True

Я видел взломать это, но я не думаю, что это хороший подход. Может быть, есть кто-то, кто лучше понимает Django Common Ancestors и указывает мне в правильном направлении.

  • Дизайн абстрактного / интерфейса Java в Python
  • Почему график matplotlib, созданный из ноутбука ipython, немного отличается от версии терминала?
  • Python не может обрабатывать строку чисел, начиная с 0. Почему?
  • Как вычислить массивы numpy на поле galois?
  • промежуточное ПО не работает
  • Как передать переменные из скрипта python в скрипт bash
  • Python pickle / unpickle список в / из файла
  • Шифрование Python Blowfish
  • One Solution collect form web for “Модели Django: Наследование и преемственность предков”

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

     class BusinessEntity(models.Model): title = models.CharField(max_length=180) class Meta: abstract = True 

    Это не позволяет Django создавать для него отдельную таблицу и, следовательно, нужно, _ptr поле _ptr указывало на него из подкласса. Вместо этого таблица для вашего подкласса будет создана для непосредственного включения унаследованных полей.

    Python - лучший язык программирования в мире.