Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 22, 2019 12:34:52

W7NTED
Зарегистрирован: 2019-08-07
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по моделям и FK

здравствуйте друзья! Перейду сразу к сути

 from django.db import models
class Position(models.Model):
    name = models.CharField(max_length=255, null=True, blank=True, default=" ")
    def __str__(self):
        return self.name
class Instructor(models.Model):
    name = models.CharField(max_length=64)
    surname = models.CharField(max_length=64)
    date_of_birth = models.DateField(null=True, blank=True)
    email = models.EmailField(unique=True, null=True)
    position = models.ForeignKey('Position', on_delete=models.SET_DEFAULT, default=1)
    is_active = models.BooleanField(default=True)
    def __str__(self):
        return self.name
Описал я сущности со связью один ко многим и получаю ошибку при миграции, что поле id на которое я ссылаюсь, не существует. Не мудрено, модель только, что написана. Подключаю в админку Position и добавляю ручками запись. Работает. Вопрос, как при описании модели не получить такую ошибку, добавить пустую при создании запссь или указать какой либо неведомый мне ключ при ссылке? как обычно поступают? На этапе обучения считаю это костылем.

 django.db.utils.IntegrityError: The row in table 'instructors_instructor' with primary key '1' has an invalid foreign key: instructors_instructor.position_id contains a value 'Django' that does not have a corresponding value in instructors_position.id.

Офлайн

#2 Авг. 22, 2019 12:46:38

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вопрос по моделям и FK

W7NTED
Фикстурой задайте.



Офлайн

#3 Авг. 22, 2019 13:47:56

W7NTED
Зарегистрирован: 2019-08-07
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по моделям и FK

FishHook
W7NTEDФикстурой задайте.
я понял, спасибо! а проигнорировать каким либо образом отсутствие данных и при появлении, вести себя заданным образом нет возможности?

Офлайн

#4 Авг. 22, 2019 14:06:33

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вопрос по моделям и FK

W7NTED
я понял, спасибо! а проигнорировать каким либо образом отсутствие данных и при появлении, вести себя заданным образом нет возможности?

Смотрите, есть понятие - ссылочная целостность. Нормальная СУБД не даст вам хранить ссылку на несуществующее поле. Допустим, у нас были записи:

Города:
id=1 name=Moscow
id=2 name=Piter
id=3 name=Vorkuta

Поставщики
id=1 name=“Vector” city=1
id=2 name=“Integral” city=1
id=3 name=“Svetlana” city=2

Если вы удаляете город с ИД=1, то СУБД должна знать, что делать с фирмами 1 и 2, есть несколько вариантов:
1) Записать в city этих поставщиков NULL
2) Удалить Поставщиков 1 и 2
3) Записать в city что-то по умолчанию
4) ….

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



Отредактировано FishHook (Авг. 22, 2019 14:07:06)

Офлайн

#5 Авг. 22, 2019 15:35:39

W7NTED
Зарегистрирован: 2019-08-07
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по моделям и FK

FishHook
Спасибо!)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version