Найти - Пользователи
Полная версия: Модели, ссылающиеся друг на друга
Начало » Django » Модели, ссылающиеся друг на друга
1
prowler
Есть две модели, А и Б. Модель Б ссылается на модель А как ForeignKey. Модель А может ссылаться на одну из ссылающихся на неё моделей Б. Как это правильнее всего оформить? Сделать “в лоб”, т.е. так, чтоб А ссылалась на Б тоже как ForeignKey, не получается.
romankrv
а какие ошибки пишут?
Ferroman
Сделать ManyToMany и почитать о реляционных базах данных.
prowler
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 не проходят
какие трюки?
Ferroman
Тогда вообще OneToOne.
ForeignKey - это many-to-one.
Вам не надо делать ссылки моделей друг на друга. Надо делать ссылку только одной модели на другую. Иначе рискуете потерять ссылочную целостность.
romankrv
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
Надо писать:
b=models.ForeignKey("B")
И все будет хорошо.
Ferroman
Плохой совет.
Перекрёстные связи между таблицами - зло.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB