Я не знаю всех полей, которые вы получаете или хотите сохранить, но для того, что я увидел в вашем коде, это должно сработать (установите max_length на то, что он должен делать, я не знаю):
Tweet(models.Model):
author = models.Charfield(max_length=50)
text = models.Charfield(max_length=500)
author_profile_url = models.URLField(null=True, blank=True)
reply_to = models.ForeignKey(Tweet, on_delete=models.CASCADE, related_name='replies')
creation_date = models.DateTimeField()
Чтобы распечатать весь разговор, вам нужно будет выполнить итерацию FK, отыскивая все связанные объекты, и упорядочить их по creation_date.
Если вы хотите показать только один разговор, вы должны отправить через просмотр исходный объект разговора, а затем вы можете сделать что-то вроде:
{{ tweet.author }}
{{ tweet.text }}
{{ tweet.creation_date }}
{% if tweet.reply_to_set.count > 0 %}
{% with replies=tweet.reply_to_set.all %}
{% for reply in replies %}
{{ reply.author }}
{{ reply.text }}
{{ reply.creation_date }}
replies to this message: {{ reply.reply_to_set.count }}
{% endfor %}
{% endwith %}
{% endif %}
Это покажет сначала чирикать информацию, а затем проверить, есть ли ответы, и если есть, покажите вам информацию каждого из них. В этом ответе я добавил replies to this message
, в котором вы можете сообщить людям, есть ли у этого ответа другие ответы. На всякий случай, если вы хотите сделать бесконечную систему ответов (как твиттер). Но тогда вы можете добавить ссылку на этот же шаблон, в котором объект является тем ответом, так что это будет основной твит, а затем будут показаны ответы.