Проблема с ForeignKey.Джанго миграции - PullRequest
0 голосов
/ 04 февраля 2019

Я должен определить класс code.Spatial, например primary_key и codels.LScharacteristic codels.PlannedUsing как внешний ключ.Я сталкиваюсь с этим, когда я пытался мигрировать: ProgrammingError: ERROR: столбец идентификатора, указанный в ограничении внешнего ключа, не существует.

Полный журнал UPD : Вышеуказанное исключение было прямой причинойследующее исключение:

Traceback (последний вызов был последним): файл "manage.py", строка 23, в файле execute_from_command_line (sys.argv) "/ home / user / MyProjects / forest-venv / lib /python3.5 / site-packages / django / core / management / init .py ", строка 371, в файле execute_from_command_line utility.execute ()" / home / user / MyProjects / forest-venv / lib /python3.5 / site-packages / django / core / management / init .py ", строка 365, в файле execute self.fetch_command (подкоманда) .run_from_argv (self.argv) файл" / home / user /MyProjects / forest-venv / lib / python3.5 / site-packages / django / core / management / base.py ", строка 288, в файле run_from_argv self.execute (* args, ** cmd_options)" / home / user /MyProjects / forest-venv / lib / python3.5 / site-packages / django / core / management / base.py ", строка 335, в исполняемой программеt = self.handle (* args, ** options) Файл "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/core/management/commands/migrate.py", строка200, в дескрипторе fake_initial = fake_initial, файл "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/migrations/executor.py", строка 117, в состоянии миграции = self._migrate_all_forwards (состояние, план, полный_план, поддельный = поддельный, поддельный_должный = поддельный_инитальный) Файл "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/migrations/executor.py"строка 147, в _migrate_all_forwards state = self.apply_migration (состояние, миграция, fake = fake, fake_initial = fake_initial) Файл "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/migrations/executor.py ", строка 244, в файле apply_migration state =igration.apply (state, schema_editor)" /home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/migrations /igration.py ", строка 122, в приложении apply.database_forwards (self.app_label, schema_editor, old_state, project_state) Файл "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/migrations/operations/fields.py", строка 216, в database_forwards schema_editor.alter_field (from_model, from_field, to_field) Файл "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/backends/base/schema.py", строка 525, в alter_field old_db_params, new_db_params,строгий) Файл "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/backends/postgresql/schema.py", строка 122, в _alter_field new_db_params, строгий, файл "/home / user / MyProjects / forest-venv / lib / python3.5 / site-packages / django / db / backends / base / schema.py ", строка 750, в _alter_field self.execute (self._create_fk_sql (модель, new_field,Файл " fk % (to_table) s _% (to_column) s")) "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/backends/base / schema.py ", строка 133, в файле execute cursor.execute (sql, params)" /home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django / db / backends / utils.py ", строка 100, в файле execute выполнить super (). execute (sql, params) Файл" /home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django / db / backends / utils.py ", строка 68, при выполнении возвращает self._execute_with_wrappers (sql, params, many = False, файл executor = self._execute)" / home / user / MyProjects / forest-venv / lib /python3.5 / site-packages / django / db / backends / utils.py ", строка 77, в файле _execute_with_wrappers return executor (файл sql, params, many, context)" / home / user / MyProjects / forest-venv / lib /python3.5 / site-packages / django / db / backends / utils.py ", строка 85, в _execute возвращает self.cursor.execute (sql, params)Файл "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/utils.py", строка 89, в выход повышение dj_exc_value.with_traceback (traceback)из файла exc_value "/home/user/MyProjects/forest-venv/lib/python3.5/site-packages/django/db/backends/utils.py", строка 85, в _execute возвращают self.cursor.execute (sql,params)

но в моей модели нет столбца идентификатора:

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, если я их не определяю?Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Я думаю, что проблема в том, что ваши поля ForeignKey не указывают явно на поле, которое вы пометили как первичное (Spatial.code).Отметив Spatial.code как основной, вы не позволяете Django создать поле id.См. документацию Но если вы укажете ForeignKey только на модель, она попытается связаться с полем id этой модели.Чтобы это исправить, вы можете добавить в поле ForeignKey параметр: to_field='code' и добавить unique=True к Spatial.code. См. Документацию

0 голосов
/ 04 февраля 2019

Вы можете использовать

def __str__(self):
        return self.etat

или

def __int__(self):

Для уточнения того, что вы возвращаете на своей модели Django.как это:

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

    def __str__(self):
        return self.tests
...