У меня есть две модели, которые ранее унаследованы от models.Model, и теперь я их реорганизовал, чтобы унаследовать от той же базовой модели. Django использует для этого многотабличное наследование, и я пытаюсь создать для этого схему и миграцию данных. В базе данных есть данные, которые необходимо перенести.
Я знаю, что Django создает OneToOneField, но я не понимаю, как это влияет на существующие элементы в базе данных.
До наследования
class BlogPost(models.Model):
name = models.CharField()
published_on = models.DateTimeField()
class AudioFile(models.Model):
file = models.FileField()
published_on = models.DateTimeField()
После наследования
class Published(models.Model):
published_on = models.DateTimeField()
class BlogPost(Published):
name = models.CharField()
class AudioFile(Published):
file = models.FileField()
Миграция
По сути, это была миграция, которая была сгенерирована при запуске:
./manage.py schemamigration app --auto
.
Созданный файл:
class Migration(SchemaMigration):
def forwards(self, orm):
db.create_table('app_published', (
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('published_on', self.gf('django.db.models.fields.DateTimeField')()),
))
db.send_create_signal('app', ['Published'])
db.delete_column('app_blogpost', 'published_on')
db.delete_column('app_blogpost', 'id')
db.add_column('app_blogpost', 'published_ptr', self.gf('django.db.models.fields.related.OneToOneField')(default=None, to=orm['app.Published'], unique=True, primary_key=True), keep_default=False)
db.delete_column('app_audiofile', 'published_on')
db.delete_column('app_audiofile', 'id')
db.add_column('app_audiofile', 'published_ptr', self.gf('django.db.models.fields.related.OneToOneField')(default=None, to=orm['app.Published'], unique=True, primary_key=True), keep_default=False)
Когда я пытаюсь запустить его, возникает ошибка IntegrityError:
column "published_ptr_id" contains null values