Форум сайта python.su
Есть две модели, А и Б. Модель Б ссылается на модель А как ForeignKey. Модель А может ссылаться на одну из ссылающихся на неё моделей Б. Как это правильнее всего оформить? Сделать “в лоб”, т.е. так, чтоб А ссылалась на Б тоже как ForeignKey, не получается.
Офлайн
а какие ошибки пишут?
Офлайн
Сделать ManyToMany и почитать о реляционных базах данных.
Офлайн
romankrv
class A(models.Model):
b=models.ForeignKey(B) # здесь ошибка – B ещё не определено, трюки с forward declaration не проходят
class B(models.Model):
a=models.ForeignKey(A)
Ferroman
Не понимаю, причём здесь ManyToMany. Каждая А ссылается ровно на одну Б, а Б – ровно на одну А.
Офлайн
prowlerкакие трюки?
B ещё не определено, трюки с forward declaration не проходят
Офлайн
Тогда вообще OneToOne.
ForeignKey - это many-to-one.
Вам не надо делать ссылки моделей друг на друга. Надо делать ссылку только одной модели на другую. Иначе рискуете потерять ссылочную целостность.
Офлайн
prowlerкод работать не будет, потому что модель В должна быть определена раньше чем модель А так как ты пишишь b=models.ForeignKey(B) но В еще не определена, потому обработчик выкинит ошибку.
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")
Офлайн
Плохой совет.
Перекрёстные связи между таблицами - зло.
Офлайн