Я хотел бы создать две модели: 1) Разговор, в котором хранится ссылка на корневое сообщение с заголовком и 2) Сообщение, в котором содержимое/текст сообщения и ссылка возвращаются в кампанию. План состоит в том, чтобы связать сообщения и в конечном итоге создать дерево беседы. Корневое сообщение в разговоре будет выступать в качестве головного (входного) узла связанной сети сообщений.Циркулярная ссылка в модели Django?
Ниже то, что я определил в файлах моделей (conversations/models.py
и messages/models.py
соответственно):
from messages.models import Message
class Conversation(models.Model):
title = models.CharField('Conversation Title', max_length=500)
created_at = models.DateTimeField(auto_now_add=True)
composer = models.ForeignKey(User)
root_message = models.ForeignKey(Message, null=True, blank=True)
from conversations.models import Conversation
class Message(models.Model):
(foreignkey very likely)
conversation = models.ForeignKey(Conversation, null=True, blank=True)
content = models.TextField(db_index=True, max_length=500)
created_at = models.DateTimeField(auto_now_add=True)
Проблема заключается в том, когда я запускаю Юга schemamigration messages --auto
или schemamigration conversations --auto
, я бегу в ошибку, как это:
class Campaign(models.Model):
File "C:\Users\Documents\GitHub\t4s\conversations\models.py", line 11, in Conversation
from messages.models import Message
ImportError: cannot import name Message
Я считаю, что это потому, что Message
и Conversation
импортируют друг друга. Но я бы хотел, чтобы каждый экземпляр Message
имел связь с Conversation
, чтобы я мог ссылаться на название разговора. Есть ли что-то, что я могу сделать, чтобы успешно создать поле Foreignkey
в Message
и Conversation
без изменения структур моделей? Заранее благодарю за ваши ответы!
возможно дубликат [Джанго круговой эталонной модели] (http://stackoverflow.com/questions/8466726/django-circular-model-reference) – NightShadeQueen
(также см документацию здесь: https: //docs.djangoproject .com/ru/dev/ref/models/fields/# foreignkey, esp второй пример) – NightShadeQueen
Измените название своего класса – Gocht