留言功能-1
dict.setfault(keyname, value):keyname必需。您要从中返回值的项目的键名。value可选。如果键存在,则此参数无效。如果键不存在,则此值将成为键的值。默认值 None。 常用于如果键不存在,则设置为value,如果存在,则不改变。
massageapp
使用parent_message =models.IntegerField(verbose_name=‘回复的留言id’)来与回复的留言相关联
massage使用publisher = models.ForeignKey(UserProfile,on_delete=models.CASCADE)与User相关联
使用topic = models.ForeignKey(Topic,on_delete_nodels.CASCADE)与文章相关联
留言功能-2
使用path转换器接收topic_id参数
因为只有一个post方法,所以直接使用视图函数
展示留言功能,在topic的view中。
查询文章的留言,按照时间倒序排序
all_messages = Message.objects.filter(topic = author_topic).order_by(’-created_time’)
遍历all_messages 为msg,如果msg为空,则表示是留言,否则是回复。
(1)使用一个字典,key为被回复的留言parent_msg字段,key是一个列表里面是字典,字典为回复。
(2)使用一个列表记录所有留言,每个留言是一个字典,带有reply:[]字段
(3)遍历留言列表,判断列表中每一项的mid是否在回复字段的key中,如果存在,则将这个key对应的value作为replay字段的值。
此过程使用了字典的hash特性,速度较快。