0
0 комментариев

Здравствуйте, у меня стоит задача перевода проекта с django версии 1.8.2 на версию 1.11. Столкнулся с проблемой с которой не могу справиться. Та модель таблиц, которая превосходно работала в 1.8.2, перестала работать в версии 1.11, и вываливается с ошибкой:

core.CarModel.manufacture: (models.E006) The field 'manufacture' clashes with the field 'manufacture' from model 'core.page'.

По всей видимости это связано с наследованием моделей, поскольку проект старый я не могу кардинально изменить схему таблиц, подскажите пожалуйста как выйти из данной ситуации.
Заранее спасибо за помощь.

Я воспроизвел схему моделей, которая прекрасно работает на 1.8.2 и перестает работать на 1.11:

# -*- coding:utf-8 -*-
from django.db import models
from django.contrib.contenttypes.models import ContentType
 
 
class InheritanceCastModel(models.Model):
 
    real_type = models.ForeignKey(ContentType, editable=False)
 
    def save(self, *args, **kwargs):
        if not self.id:
            self.real_type = self._get_real_type()
        super(InheritanceCastModel, self).save(*args, **kwargs)
 
    def _get_real_type(self):
        return ContentType.objects.get_for_model(type(self))
 
    def cast(self):
        return self.real_type.get_object_for_this_type(pk=self.pk)
 
    class Meta:
        abstract = True
 
 
class Page(InheritanceCastModel):
    title = models.CharField(max_length=512, verbose_name=u'Title', blank=True)
 
 
class Manufacture(Page):
    ru_title = models.CharField(max_length=128, verbose_name=u'RU Title')
 
 
class CarModel(Page):
    manufacture = models.ForeignKey(Manufacture, verbose_name=u'Manufacture')
    ru_title = models.CharField(max_length=64, verbose_name=u'RU Title')


Добавить комментарий