Внешний ключ для получения колонки от другой модели - Django - PullRequest
0 голосов
/ 18 мая 2018

Я пытался добавить в мою модель TrainingSubject новый столбец с именем «email» и связать его значение с другой моделью (Training) с помощью внешнего ключа, а затем отобразить все это на внешнем интерфейсе (задняя часть - django, передняя часть - реакция.

Я добавил эту строку в TrainingSubject модель:

email = models.CharField(_('Email assigned'), max_length=100, default='', blank=True)

, а эту - в Training модель:

email_to = models.ForeignKey(TrainingSubject, related_name='manager_email', default='', blank=True)  

так что все это выглядит следующим образом:

    class TrainingSubject(models.Model):
    """TrainingSubject model for storing subjects."""

    name = models.CharField(_('name'), max_length=160, unique=True)
    email = models.CharField(_('Email assigned'), max_length=100, default='', blank=True)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = _('Training subject')
        verbose_name_plural = _('Training subjects')


class Training(models.Model):
    """Training model for storing trainings."""

    subject = models.ForeignKey(TrainingSubject, verbose_name=_('subject'),
                                related_name='trainings')
    email_to = models.ForeignKey(TrainingSubject, related_name='manager_email', default='', blank=True)                                
    date = models.DateTimeField(_('date'))
    timezone = models.CharField(

Миграция не может быть применена, я получаю эту ошибку каждый раз, когда начинаю создавать эти вещи.

        Running migrations:
      Rendering model states... DONE
      Applying sonel_core.0089_training_email_to...Traceback (most recent call last):
      File "/home/vagrant/.pyenv/versions/cms/lib/python3.5/site-packages/django/db/backends/utils.py", line 64, in execute
        return self.cursor.execute(sql, params)
    psycopg2.IntegrityError: column "email_to_id" contains null values

Ранее япопытался добавить все это только за один шаг, теперь я разбил его на два этапа: 1. добавьте email в TrainingSubject (который отлично работает) и 2. добавьте email_to вМодель обучения и возможность наконец-то отобразить это электронное письмо на внешнем интерфейсе.

Что я делаю не так?

1 Ответ

0 голосов
/ 18 мая 2018

Определите поле для принятия нулевых значений, так как в таблице уже есть некоторые данные, при добавлении нового поля FK должно быть задано нулевое значение или допустимые значения.

email_to = models.ForeignKey(TrainingSubject, related_name='manager_email', default='', blank=True, null=True)  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...