Найти - Пользователи
Полная версия: Вопрос по моделям и FK
Начало » Django » Вопрос по моделям и FK
1
W7NTED
здравствуйте друзья! Перейду сразу к сути

 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.
FishHook
W7NTED
Фикстурой задайте.
W7NTED
FishHook
W7NTEDФикстурой задайте.
я понял, спасибо! а проигнорировать каким либо образом отсутствие данных и при появлении, вести себя заданным образом нет возможности?
FishHook
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) ….

вы выбрали первый вариант, значит вам так лучше, вам виднее. Но вообще стратегии бывают разные, смотрите в документацию и выбирайте
W7NTED
FishHook
Спасибо!)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB