Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 7, 2008 02:00:08

romankrv
От:
Зарегистрирован: 2008-05-23
Сообщения: 513
Репутация: +  0  -
Профиль   Отправить e-mail  

related_name зачем оно?

Хелло
Цитата с офф доки http://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward

You can override the FOO_set name by setting the related_name parameter in the ForeignKey() definition. For example, if the Entry model was altered to blog = ForeignKey(Blog, related_name='entries'), the above example code would look like this:

Понятно что этим мы перекрываем название менеджера FOO_set который возвращает все экземпляры молели по схеме бэкворд (foirgin key) на свой.

Вопрос для каких практических целей это используется так как это вроде вносит лишние имена при работе. Что в этом есть удобного ?

Спасибо

Офлайн

#2 Сен. 7, 2008 08:43:40

Lolka
От:
Зарегистрирован: 2007-09-29
Сообщения: 128
Репутация: +  0  -
Профиль   Отправить e-mail  

related_name зачем оно?

Пример – модель трижды завешена на User по разным причинам :

model Labyrinth(models.Model):
designer = models.ForeignKey(User, null=False, related_name='designer') # дизайнер
curator = models.ForeignKey(User, null=True, related_name='curator') # куратор
manager = models.ForeignKey(User, null=True, related_name='manager') # менеджер
Если не указать related_name, то получится такое:
Error: One or more models did not validate:
labyrinths.labyrinth: Accessor for field 'designer' clashes with related field 'User.labyrinth_set'. Add a related_name argument to the definition for 'designer'.
labyrinths.labyrinth: Accessor for field 'curator' clashes with related field 'User.labyrinth_set'. Add a related_name argument to the definition for 'curator'.
...



Офлайн

#3 Сен. 7, 2008 10:33:20

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

related_name зачем оно?

romankrv
Вопрос для каких практических целей это используется так как это вроде вносит лишние имена при работе. Что в этом есть удобного ?
Так просто лаконичнее. Вместо уродливого User.entry_set можно например User.entries сделать.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version