2017-04-10 8 views
0

プロジェクトをdjangoバージョン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で動作を停止し、エラーで抜けます根本的にテーブルのスキームを変更しないで、この状況から抜け出す方法を教えてください。 ご協力いただきありがとうございます。

私は1.8.2で正常に動作し、1.11に動作を停止したモデルのスキーム、再現しています:ページのモデルは製造モデルによって継承されているのでDjangoは代理フィールド「製造を作成し、

# -*- 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

を"という名前のオブジェクトがありますが、この名前はCarModelモデルで使用されているため、競合が発生します。 djangoバージョン1.8では、フィールドは "manufacture_ptr"と呼ばれていたので、競合はありませんでした。 django 1.9,1.10,1.11のバージョンでは、このフィールドは「製造」と呼ばれます。

解決方法は、CarModelモデルのフィールド名を「製造元」から別のメーカーに変更することです。

関連する問題