Наследование и миграции Django AbstractModel
Хочу прояснить свое понимание наследования абстрактной модели Django и миграций, поскольку мне было трудно найти четкую документацию по этому вопросу.
Допустим, у меня есть пакет pckg.app.models, определяющий AbstractModel:
class AbstractObj(models.Model):
name = CharField(max_length=100)
class Meta:
verbose_name = _("Obj")
abstract = True
def __str__(self):
return str(self.label)
Возможно ли изменить поле name через наследование? Или можно импортировать этот пакет, чтобы поле 'name' можно было перенести и изменить?
В файле models.py моего приложения, если я импортирую и подклассифицирую его:
from pckg.app.models import Obj
Class NewObj(Obj):
name = CharField(max_length=200)
def __str__(self):
return self.label
это создаст миграцию, такую как:
from __future__ import unicode_literals
from django.db import migrations, models
from forms_builder.forms import fields
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('foo', 'bar'),
]
operations = [
migrations.CreateModel(
name='NewObj',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')),
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')),
('name', models.CharField(max_length=200)),
],
),
]
но это не сработает, потому что NewObj является экземпляром Obj, а не Obj:
django.core.exceptions.FieldError: Local field 'name' in class 'NewObj' clashes with field of the same name from base class 'Obj'
существует ли способ мигрировать или изменить AbstractObj без определения его в моем приложении Django и создания для него специального файла(ов) миграции?