外键有问题。Django迁移

外键有问题。Django迁移,django,django-models,foreign-keys,primary-key,migrate,Django,Django Models,Foreign Keys,Primary Key,Migrate,我必须定义code.Spatial类,如主键和codels.LScharacteristic codels.PlannedUsing,如外键。 当我尝试migrate:ProgrammingError:ERROR:foreign key约束中指定的id列不存在时,我遇到了这个问题 UPD完整日志:上述异常是以下异常的直接原因: 回溯(最近一次呼叫最后一次): 文件“manage.py”,第23行,在 从命令行(sys.argv)执行命令 文件“/home/user/MyProjects/fore

我必须定义code.Spatial类,如主键和codels.LScharacteristic codels.PlannedUsing,如外键。 当我尝试migrate:ProgrammingError:ERROR:foreign key约束中指定的id列不存在时,我遇到了这个问题

UPD完整日志:上述异常是以下异常的直接原因:

回溯(最近一次呼叫最后一次): 文件“manage.py”,第23行,在 从命令行(sys.argv)执行命令 文件“/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/core/management/init.py”,第371行,从命令行执行 utility.execute() 文件“/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/core/management/init.py”,第365行,在execute中 self.fetch_命令(子命令)。从_argv(self.argv)运行_ 文件“/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/core/management/base.py”,第288行,运行时从 self.execute(*args,**cmd_选项) 文件“/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/core/management/base.py”,第335行,在execute中 输出=self.handle(*args,**选项) handle中的文件“/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/core/management/commands/migrate.py”,第200行 假首字母=假首字母, 文件“/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/migrations/executor.py”,第117行,在migrate中 状态=self.\u迁移\u所有\u转发(状态,计划,完整计划,假=假,假首字母=假首字母) 文件“/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/migrations/executor.py”,第147行,全部向前迁移 state=self.apply\u迁移(state,migration,false=false,false\u initial=false\u initial) 文件“/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/migrations/executor.py”,第244行,应用程序迁移 state=migration.apply(状态,模式编辑器) 文件“/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/migrations/migration.py”,第122行,在apply中 操作。数据库转发(self.app\u标签、模式编辑器、旧状态、项目状态) 数据库中的文件“/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/migrations/operations/fields.py”,第216行 schema_editor.alter_字段(从_模型、从_字段到_字段) 文件“/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/backends/base/schema.py”,第525行,在alter_字段中 旧参数,新参数,严格) 文件“/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/backends/postgresql/schema.py”,第122行,在“alter”字段中 新的参数,严格的, 文件“/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/backends/base/schema.py”,第750行,在\u alter\u字段中 self.execute(self.\u create\u fk\u sql(model,new\u字段,“fk%(到表)s%(到列)s”)) 文件“/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/backends/base/schema.py”,执行中第133行 cursor.execute(sql,params) 文件“/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/backends/utils.py”,执行中的第100行 return super().execute(sql,params) 文件“/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/backends/utils.py”,执行中第68行 返回self.\u使用包装器执行(sql,params,many=False,executor=self.\u execute) 文件“/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/backends/utils.py”,第77行,使用包装器执行 返回执行器(sql、参数、多个、上下文) 文件“/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/backends/utils.py”,第85行,在 返回self.cursor.execute(sql,params) 文件“/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/utils.py”,第89行,在退出 使用exc_值的_回溯(回溯)提高dj_exc_值 文件“/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/backends/utils.py”,第85行,在 返回self.cursor.execute(sql,params)

但我的模型中没有id列:

from django.db import models
from django.utils.translation import ugettext_lazy as _
from renter.models import RefAbstract, Renter
from django.contrib.gis.db import models
from textwrap import shorten


class Unitt(RefAbstract):
   ....//some classes
class Task(RefAbstract):
    class Meta(RefAbstract.Meta):
        verbose_name = 'task'
        verbose_name_plural = 'tasks'

class Spatial(models.Model):
    codeq = models.IntegerField('no',help_text='no') 
    code = models.PositiveIntegerField('cutare',primary_key=True,help_text='cutare')//unique column
    codeV = models.IntegerField('novi',help_text='novi') 
    renter = models.ForeignKey(Renter, on_delete=models.DO_NOTHING, verbose_name='renter')
    geometry = models.MultiPolygonField(geography=True, verbose_name='geometry')

    class Meta:
        verbose_name = 'cutarea'
        verbose_name_plural = 'cutarea'


class LScharacteristic(models.Model):
    codels = models.ForeignKey(Spatial, on_delete=models.DO_NOTHING, verbose_name = 'cutarea')// Foreign Key
    tract = models.CharField('tract',max_length = 80, help_text='tract') 
    task = models.ForeignKey(Task,  on_delete=models.DO_NOTHING, verbose_name='task')
    totalarea = models.PositiveIntegerField('totarea',help_text = 'totarea')
    explarea = models.PositiveIntegerField('exarea',help_text = 'exarea')
    protecttype = models.CharField('category',max_length = 50, help_text = 'category')

    class Meta:
        verbose_name = 'characteristic'
        verbose_name_plural = 'characteristics'

class PlannedUsing(models.Model):
    codels = models.ForeignKey(Spatial, on_delete=models.DO_NOTHING, verbose_name = 'cutarea') // Foreign Key   
    codeq = models.IntegerField(help_text='number')
    cutareaShape = models.ForeignKey(CutareaShape, on_delete=models.DO_NOTHING, verbose_name='form')
    cuttype = models.ForeignKey(CutareaType, on_delete=models.DO_NOTHING, verbose_name='type1')
    managetype = models.ForeignKey(ManageType, on_delete=models.DO_NOTHING, verbose_name='type2')
    unit = models.ForeignKey(Unitt, on_delete=models.DO_NOTHING, verbose_name='unit')
    composition = models.ForeignKey(Composition, on_delete=models.DO_NOTHING, verbose_name='sort')
    assortment = models.ForeignKey(Assortment, on_delete=models.DO_NOTHING, verbose_name='assort)
    class Meta:
        verbose_name = 'planus'
        verbose_name_plural = 'planuss'
什么是id列?如果我没有定义id列,为什么id列存在? 我怎样才能修好它

您可以使用

def __str__(self):
        return self.etat

对于specify,您在django模型上返回什么。 像这样:

tests= models.CharField(max_length=100, verbose_name="Test")
class Meta:
        verbose_name = "Tests"
        ordering = ['tests']

    def __str__(self):
        return self.tests
你可以用

def __str__(self):
        return self.etat

对于specify,您在django模型上返回什么。 像这样:

tests= models.CharField(max_length=100, verbose_name="Test")
class Meta:
        verbose_name = "Tests"
        ordering = ['tests']

    def __str__(self):
        return self.tests

我认为问题在于您的ForeignKey字段没有明确指向您标记为primary的字段(
Spatial.code
)。 通过将
Spatial.code
标记为primary,可以阻止Django创建id字段。请参见,但如果将ForeignKey指向一个模型,它将尝试链接到该模型的id字段。
要解决此问题,您可以将参数:
添加到\u field='code'
并将
unique=True
添加到
Spatial.code

我认为问题在于您的ForeignKey字段没有明确指向您标记为主要的字段(
Spatial.code
)。 通过将
Spatial.code
标记为primary,可以阻止Django创建id字段。请参见,但如果将ForeignKey指向一个模型,它将尝试链接到该模型的id字段。
要解决此问题,您可以将参数:
To_field='code'
添加到ForeignKey字段,并将
unique=True
添加到
spatical.code

这对我不起作用。我使用了这个压缩,但是错误被保存了。它对我不起作用。我使用这个压缩,但错误被保存。