prowler
Апрель 21, 2009 16:57:07
Есть две модели, А и Б. Модель Б ссылается на модель А как ForeignKey. Модель А может ссылаться на одну из ссылающихся на неё моделей Б. Как это правильнее всего оформить? Сделать “в лоб”, т.е. так, чтоб А ссылалась на Б тоже как ForeignKey, не получается.
romankrv
Апрель 21, 2009 19:06:11
а какие ошибки пишут?
Ferroman
Апрель 22, 2009 01:35:36
Сделать ManyToMany и почитать о реляционных базах данных.
prowler
Апрель 22, 2009 14:05:59
romankrv
class A(models.Model):
b=models.ForeignKey(B) # здесь ошибка – B ещё не определено, трюки с forward declaration не проходят
class B(models.Model):
a=models.ForeignKey(A)
Ferroman
Не понимаю, причём здесь ManyToMany. Каждая А ссылается ровно на одну Б, а Б – ровно на одну А.
Александр Кошелев
Апрель 22, 2009 15:08:54
prowler
B ещё не определено, трюки с forward declaration не проходят
какие трюки?
Ferroman
Апрель 22, 2009 15:16:00
Тогда вообще
OneToOne.
ForeignKey - это many-to-one.
Вам не надо делать ссылки моделей друг на друга. Надо делать ссылку только одной модели на другую. Иначе рискуете потерять
ссылочную целостность.
romankrv
Апрель 23, 2009 01:54:51
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
Zada
Апрель 27, 2009 22:07:58
Надо писать:
И все будет хорошо.
Ferroman
Апрель 28, 2009 00:23:13
Плохой совет.
Перекрёстные связи между таблицами - зло.