Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 21, 2009 16:57:07

prowler
От:
Зарегистрирован: 2008-09-13
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Модели, ссылающиеся друг на друга

Есть две модели, А и Б. Модель Б ссылается на модель А как ForeignKey. Модель А может ссылаться на одну из ссылающихся на неё моделей Б. Как это правильнее всего оформить? Сделать “в лоб”, т.е. так, чтоб А ссылалась на Б тоже как ForeignKey, не получается.



Офлайн

#2 Апрель 21, 2009 19:06:11

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

Модели, ссылающиеся друг на друга

Офлайн

#3 Апрель 22, 2009 01:35:36

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Модели, ссылающиеся друг на друга

Сделать ManyToMany и почитать о реляционных базах данных.

Офлайн

#4 Апрель 22, 2009 14:05:59

prowler
От:
Зарегистрирован: 2008-09-13
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Модели, ссылающиеся друг на друга

romankrv
class A(models.Model):
b=models.ForeignKey(B) # здесь ошибка – B ещё не определено, трюки с forward declaration не проходят
class B(models.Model):
a=models.ForeignKey(A)
Ferroman
Не понимаю, причём здесь ManyToMany. Каждая А ссылается ровно на одну Б, а Б – ровно на одну А.



Офлайн

#5 Апрель 22, 2009 15:08:54

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

Модели, ссылающиеся друг на друга

prowler
B ещё не определено, трюки с forward declaration не проходят
какие трюки?



Офлайн

#6 Апрель 22, 2009 15:16:00

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Модели, ссылающиеся друг на друга

Тогда вообще OneToOne.
ForeignKey - это many-to-one.
Вам не надо делать ссылки моделей друг на друга. Надо делать ссылку только одной модели на другую. Иначе рискуете потерять ссылочную целостность.

Офлайн

#7 Апрель 23, 2009 01:54:51

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

Модели, ссылающиеся друг на друга

prowler
romankrv
class A(models.Model):
b=models.ForeignKey(B) # здесь ошибка – B ещё не определено, трюки с forward declaration не проходят
class B(models.Model):
a=models.ForeignKey(A)
Ferroman
Не понимаю, причём здесь ManyToMany. Каждая А ссылается ровно на одну Б, а Б – ровно на одну А.
код работать не будет, потому что модель В должна быть определена раньше чем модель А так как ты пишишь b=models.ForeignKey(B) но В еще не определена, потому обработчик выкинит ошибку.
что то типа NameError: name ‘B’ is not defined

Офлайн

#8 Апрель 27, 2009 22:07:58

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

Модели, ссылающиеся друг на друга

Надо писать:

b=models.ForeignKey("B")
И все будет хорошо.



Офлайн

#9 Апрель 28, 2009 00:23:13

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Модели, ссылающиеся друг на друга

Плохой совет.
Перекрёстные связи между таблицами - зло.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version