Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 17, 2009 21:57:35

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с ForeignKey

Исключительно ради select_related сделал ForeignKey в модели на некоторые поля.
Для селектов это пригодилось.
Но для инсертов… неудобно. Требует вместо значения X_id экземпляр класса X.
Мне такая функциональность нафиг не нужна. Как это обойти?



Офлайн

#2 Окт. 18, 2009 18:54:02

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с ForeignKey

lorien
obj = SomeModel(name='foobar')
obj.topic_id = 44
obj.save()
Это не работает. См.причину выше.
Кстати, проверил.



Офлайн

#3 Окт. 18, 2009 19:26:08

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Проблема с ForeignKey

Nick2009
Кстати, проверил.
Плохо значит пробовали.



Офлайн

#4 Окт. 18, 2009 23:32:01

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с ForeignKey

Daevaorn
Nick2009
Кстати, проверил.
Плохо значит пробовали.
А как надо? Я точно так и сделал, кроме вот этого name='foobar', т.к. мне не нужно создавать имя.
Не просто не работает, а не работает так как я сказал.
obj = SomeModel()
obj.topic_id = 44

“Cannot assign ”44“ : SomeModel.topic_id” must be a “Topic” instance"
Хочет экземпляр вместо значения.



Отредактировано (Окт. 19, 2009 00:09:52)

Офлайн

#5 Окт. 18, 2009 23:54:49

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Проблема с ForeignKey

Уличная магия!

Nick2009
obj.topic_id_id = 44



Офлайн

#6 Окт. 19, 2009 00:11:19

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с ForeignKey

Daevaorn
Вы по человечески скажите, что хотите сказать. Не понимаю я междометий.



Офлайн

#7 Окт. 19, 2009 00:29:46

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Проблема с ForeignKey

Nick2009
Вы по человечески скажите, что хотите сказать. Не понимаю я междометий.
Брррррр!!!

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



Офлайн

#8 Окт. 19, 2009 00:38:56

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с ForeignKey

Daevaorn
Nick2009
Вы по человечески скажите, что хотите сказать. Не понимаю я междометий.
Брррррр!!!

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



Офлайн

#9 Окт. 19, 2009 00:46:48

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с ForeignKey

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 поля.

Мне не эта магия нужна, а простое присвоение!



Отредактировано (Окт. 19, 2009 01:02:19)

Офлайн

#10 Окт. 19, 2009 01:21:11

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с ForeignKey

Daevaorn
Уличная магия!
obj.topic_id_id = 44
Это вредная магия.
Должно быть obj.topic_id === const
Остальное от лукавого.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version