2017-04-10 87 views
0

我有将项目从django版本1.8.2转换为版本1.11的任务。面对一个我无法应付的问题。表格的这种模式,这在1.8.2工作非常出色,停在1.11版本的工作,并以一个错误掉出来:从Django 1.8.2到Django的继承模型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): 
    # here problem:   
    manufacture = models.ForeignKey(Manufacture, verbose_name=u'Manufacture') 
    ru_title = models.CharField(max_length=64, verbose_name=u'RU Title') 

回答

0

,因为页面模型是由制造模型继承,Django的创建一个代理领域“制造“用于页面对象,但该名称用于CarModel模型中,这会导致冲突。在django 1.8版中,这个字段被称为“manufacture_ptr”,所以没有冲突。在django 1.9,1.10,1.11版本中,该字段被称为“制造”。

解决方法是将CarModel模型中的字段名称从“制造”更改为另一个。