我正在构建一个工具,该工具可以获取用户时间轴推文及其响应,我需要找出如何将这些对话存储在数据库中,然后再将其呈现在模板中。
[要进行对话,我使用while循环,该循环获取一条tweet的'in_reply_to_status_id',然后通过id检索此回复的状态对象,找到其'in_reply_to_status_id'等,直到检索到整个对话为止。
这是我使用的代码:
conversation = []
while True:
response = api.get_status(id=tweet_id, tweet_mode='extended')._json
if response['in_reply_to_status_id'] == None:
break
else:
message_dict = {}
message_dict['author'] = response['user']['screen_name']
message_dict['text'] = response['full_text']
message_dict['created_at'] = response['created_at']
message_dict['author_profile_url'] = response['user']['profile_image_url']
conversation.append(message_dict)
tweet_id = response['in_reply_to_status_id']
if len(conversation) == 0:
return None
return reversed(conversation)
在我的models.py中,我有一个Tweet模型,我需要了解如何制作一个模型来存储上面脚本检索到的整个对话/对话/线程。另外,以后应该可以将对话呈现为简单的聊天对话。
[我的最初想法是在我的Tweet模型中添加“回复”字段,并将对话存储为JSON,但这对我来说似乎不是正确的解决方案。
我不知道您要获取或要存储的所有字段,但是对于您在代码中看到的内容,它应该可以工作(将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之前对它们进行排序。