2016-11-22 42 views
0

我試圖實現的是,由Django創建和管理的模型Person有一個ManyToMany字段,其型號爲Property,該字段是使用inspectdb「創建」的並且已經存在於數據庫中。Django ManyToMany字段與已經存在的表

Property包含地理數據,不能進行管理或Django的改變)

當試圖遷移,它提出:

ValueError: Related model 'cadastroapp.Property' cannot be resolved

Full stack here

一文不值,我從遷移刪除文件創建模型Property的步驟,因爲它已經存在和AFAIK沒有辦法告訴Django這個模型類

models.py(簡體):

class Person(models.Model): 
    objectid = models.AutoField(primary_key=True) 
    properties = models.ManyToManyField(
     'Property', 
     through = 'Person_Property', 
     ) 
    class Meta: 
     db_table = 'django_person' 

class Person_Property(models.Model): 
    cod_person = models.ForeignKey('Person', on_delete=models.CASCADE) 
    cod_property = models.ForeignKey('Property', on_delete=models.CASCADE) 

    class Meta: 
     db_table = 'django_person_property' 

class Property(models.Model): 
    objectid = models.BigIntegerField(unique=True, primary_key=True) 
    created_user = models.CharField(max_length=765, blank=True, null=True) 
    created_date = models.DateTimeField(blank=True, null=True) 
    last_edited_user = models.CharField(max_length=765, blank=True, null=True) 
    last_edited_date = models.DateTimeField(blank=True, null=True) 
    shape = models.TextField(blank=True, null=True) # This field type is a guess. - ESRI Shape 

    class Meta: 
     managed = False 
     db_table = '"GEO"."PROPERTY"' 
+0

請張貼遷移文件cadastroapp.0006_auto_20161122_1533 –

+0

@PatrickFalvey這裏http://pastebin.com/Nv49Kwep – Mojimi

回答

0

有你的models.py文件一對夫婦的錯誤。 當定義一個ForeignKey或ManytoMany字段時,您不希望模型名稱用引號引起來。

請更改:

class Person(models.Model): 
    properties = models.ManyToManyField(
     'Property', 
     through = 'Person_Property', 
     ) 

class Person_Property(models.Model): 
    cod_person = models.ForeignKey('Person', on_delete=models.CASCADE) 
    cod_property = models.ForeignKey('Property', on_delete=models.CASCADE) 

到:

class Person(models.Model): 
    properties = models.ManyToManyField(
     Property, 
     through = 'Person_Property', 
     ) 

class Person_Property(models.Model): 
    cod_person = models.ForeignKey(Person, on_delete=models.CASCADE) 
    cod_property = models.ForeignKey(Property, on_delete=models.CASCADE) 

然後刪除您的遷移文件cadastroapp.0006_auto_20161122_1533。 然後運行makemigrations並再次遷移。

這可能仍然沒有錯誤遷移,但它會讓我們走上正軌。

+0

即使在拆除延遲引用錯誤仍然適用,我相信這是由於這樣的事實,我手動刪除該位在遷移過程中創建了Poperty模型,但是如果我不刪除它,它會引發表已存在的ORA錯誤 – Mojimi

+0

如果所有migrations.CreateModel都創建表,我想我可以隻手動創建它們做一個假的移民,但不知道 – Mojimi

相關問題