我想要实现的是,由Django创建和管理的模型Person
具有模型Property
的ManyToMany字段,该字段使用inspectdb“创建”并且已存在于数据库中
(Property
包含地理数据,Django无法管理或更改
尝试迁移时,会引发:
ValueError:相关模型'cadastroapp.Property'无法解析
值得我从迁移文件中删除创建模型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 :(得分: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并再次迁移。
这可能仍然无法在没有错误的情况下迁移,但它会使我们走上正轨。