Найти - Пользователи
Полная версия: Проблема с ForeignKey
Начало » Django » Проблема с ForeignKey
1 2
Nick2009
Исключительно ради select_related сделал ForeignKey в модели на некоторые поля.
Для селектов это пригодилось.
Но для инсертов… неудобно. Требует вместо значения X_id экземпляр класса X.
Мне такая функциональность нафиг не нужна. Как это обойти?
Nick2009
lorien
obj = SomeModel(name='foobar')
obj.topic_id = 44
obj.save()
Это не работает. См.причину выше.
Кстати, проверил.
Александр Кошелев
Nick2009
Кстати, проверил.
Плохо значит пробовали.
Nick2009
Daevaorn
Nick2009
Кстати, проверил.
Плохо значит пробовали.
А как надо? Я точно так и сделал, кроме вот этого name='foobar', т.к. мне не нужно создавать имя.
Не просто не работает, а не работает так как я сказал.
obj = SomeModel()
obj.topic_id = 44

“Cannot assign ”44“ : SomeModel.topic_id” must be a “Topic” instance"
Хочет экземпляр вместо значения.
Александр Кошелев
Уличная магия!
Nick2009
obj.topic_id_id = 44
Nick2009
Daevaorn
Вы по человечески скажите, что хотите сказать. Не понимаю я междометий.
Александр Кошелев
Nick2009
Вы по человечески скажите, что хотите сказать. Не понимаю я междометий.
Брррррр!!!

Практически во всех случаях можно указывать первичный ключ вместо самого объекта при присвоении соответствующего атрибута. Если предположить общий случай и что item это имя поля ForeignKey, то item_id это тот атрибут которому можно присвоить значения первичного ключа объекта.
Nick2009
Daevaorn
Nick2009
Вы по человечески скажите, что хотите сказать. Не понимаю я междометий.
Брррррр!!!

Практически во всех случаях можно указывать первичный ключ вместо самого объекта при присвоении соответствующего атрибута. Если предположить общий случай и что item это имя поля ForeignKey, то item_id это тот атрибут которому можно присвоить значения первичного ключа объекта.
Кто-то из нас конкретно тупит…
Nick2009
Daevaorn
Nick2009
Вы по человечески скажите, что хотите сказать. Не понимаю я междометий.
Брррррр!!!

Практически во всех случаях можно указывать первичный ключ вместо самого объекта при присвоении соответствующего атрибута. Если предположить общий случай и что item это имя поля ForeignKey, то item_id это тот атрибут которому можно присвоить значения первичного ключа объекта.
Не надо ничего предполагать. Я всегда явно задаю все имена.
Если таблица item, то класс Item, PK и FK везде “item_id” и совпадают с именем поля, о чем явно прописано в модели.
Тип этого поля везде INTEGER.
Присвоить нужно INTEGER именно в том месте, где нужно, а не в ссылочной таблице.
Нужно полностью отключить всю функциональность джанговского ForeignKey. КАК?

Кстати, так как Вы написали, я с трудом понял, но сделал. Не работает. т.к.

при таком присвоении

X.item_id__item_id = 44

в таблицу X будет пытаться записываться None и вызывать ошибку.
Т.к. не создан экземпляр объекта на который ссылается item_id__item_id
Я проверил, всё так и есть. Присвоение проходит, но теперь сваливается на save, т.к. NULL или None не допустимы для NOT NULL поля.

Мне не эта магия нужна, а простое присвоение!
Nick2009
Daevaorn
Уличная магия!
obj.topic_id_id = 44
Это вредная магия.
Должно быть obj.topic_id === const
Остальное от лукавого.
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