Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 5, 2010 13:53:29

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

Когда есть ключ ForeignKey

Всем привет. Есть вопрос больше алгоритмический, нежели прикладной.
Смотрите. Есть у меня две модели TestParent и TestChild
У TestChild есть ключ ForeignKey(TestParent)

Так вот. Когда я делаю вид (views.py) я ищу в БД всех детей по id-родителя. что-то вроде вот такого

TestChild.objects.get(parent_id=id)
Все работает. А может ли быть способ… более.. грамотный что ли. Ведь мы заводим ключ ForeignKey. А в моем случае получается что он и не нужен вообще как таковой.



Офлайн

#2 Янв. 5, 2010 13:58:44

tezro
От:
Зарегистрирован: 2009-12-09
Сообщения: 90
Репутация: +  0  -
Профиль   Отправить e-mail  

Когда есть ключ ForeignKey

- parent 1
-- child 1
-- child 2
-- child 3

- parent 2
-- child 4
-- child 5
-- child 6
TestChild.objects.get(parent_id=id) даст вам ошибку, так как вернётся несколько Child.

Если вы имеете ввиду грамотный, то может это: Child.objects.filter(parent = Parent.object.get(pk = 1))



Офлайн

#3 Янв. 5, 2010 14:04:57

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

Когда есть ключ ForeignKey

Спасибо за исправление ошибки)) Я только что в доках это нашел. Это тоже имеет место быть.
Но меня также волнует вопрос другой. Мы получается все равно игнорируем все ключи когда запрашиваем из БД данные.

Я просто думал есть способ более…хм.. объектный что ли. Ведь мы в модели указываем ключи,а значит если нашли родителя, то и дети автоматически подхватываются. Образно говоря что-то вроде вот такого

parent = Parents.objects.get(id=id)
children = parent.get_child()
Что-то вроде такого разве не реализовано в джанге? Меня это больше интересовало :) Я надеюсь вы поняли,ч то я имею ввиду. Ну думал что уже автоматизировано все. Разве нет?



Офлайн

#4 Янв. 5, 2010 14:08:48

tezro
От:
Зарегистрирован: 2009-12-09
Сообщения: 90
Репутация: +  0  -
Профиль   Отправить e-mail  

Когда есть ключ ForeignKey

dissdoc
Спасибо за исправление ошибки)) Я только что в доках это нашел. Это тоже имеет место быть.
Но меня также волнует вопрос другой. Мы получается все равно игнорируем все ключи когда запрашиваем из БД данные.

Я просто думал есть способ более…хм.. объектный что ли. Ведь мы в модели указываем ключи,а значит если нашли родителя, то и дети автоматически подхватываются. Образно говоря что-то вроде вот такого
parent = Parents.objects.get(id=id)
children = parent.get_child()
Что-то вроде такого разве не реализовано в джанге? Меня это больше интересовало :) Я надеюсь вы поняли,ч то я имею ввиду. Ну думал что уже автоматизировано все. Разве нет?
http://docs.djangoproject.com/en/dev/ref/models/querysets/#id4 - оно?



Офлайн

#5 Янв. 5, 2010 14:20:17

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

Когда есть ключ ForeignKey

Похоже оно, сейчас буду пробовать и проверять :)
Спасибо за оказываемую помощь.



Офлайн

#6 Янв. 5, 2010 15:31:35

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

Когда есть ключ ForeignKey

Все то, только такое возможно от детей к родителю, а не наоборот. Эх…
Ну придется действовать по вашему первому совету.



Офлайн

#7 Янв. 5, 2010 15:36:16

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

Когда есть ключ ForeignKey

dissdoc
Все то, только такое возможно от детей к родителю, а не наоборот. Эх…
Читайте документацию.



Офлайн

#8 Янв. 5, 2010 17:05:14

tezro
От:
Зарегистрирован: 2009-12-09
Сообщения: 90
Репутация: +  0  -
Профиль   Отправить e-mail  

Когда есть ключ ForeignKey

dissdoc
Все то, только такое возможно от детей к родителю, а не наоборот. Эх…
Ну придется действовать по вашему первому совету.
child = Child.objects.select_related().get(pk=1)
parent = child.parent
http://docs.djangoproject.com/en/dev/topics/db/queries/#related-objects
parent = Parent.objects.get(pk=1)
children = parent.child_set.all()
child = parent.child.objects.get(pk=1)
Ну в доке же есть.



Офлайн

#9 Янв. 5, 2010 17:51:15

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

Когда есть ключ ForeignKey

Ну это я видел) В итоге объекты получаем по запросу, а не по ссылке :) Вот что я имел ввиду)) Это у родителя
А у детей как раз по ссылке)))
А вы мне как раз то же самое написали, что я и писал)))



Офлайн

#10 Янв. 5, 2010 17:56:56

tezro
От:
Зарегистрирован: 2009-12-09
Сообщения: 90
Репутация: +  0  -
Профиль   Отправить e-mail  

Когда есть ключ ForeignKey

dissdoc
Ну это я видел) В итоге объекты получаем по запросу, а не по ссылке :) Вот что я имел ввиду)) Это у родителя
А у детей как раз по ссылке)))
А вы мне как раз то же самое написали, что я и писал)))
Тогда, я не понимаю.
children = parent.get_child()
и
children = parent.child_set.all()
Не катит?



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version