简介:我有3个模型user
,post
,group
。用户可以发表帖子,但是每个帖子必须属于一个组。我有400个固定小组。用户必须从现有的400个组中进行选择。用户无法添加,删除或更新group
。
此外:
用户可以在单击特定组时成为组的成员。他们会看到该组中的所有帖子。
用户可以关注-取消关注其他用户。
**我现在拥有的内容:**用户登录时。在他的主页上,他看到了。他所属的每个小组的所有职位。所有组中的所有帖子都处理完毕。然后,他会看到他一一跟随的所有人员的帖子
我想要的东西:我希望按时间排列帖子 示例:如果他跟随的一个人只是写了一篇帖子,那么该帖子就是第一篇。按时间顺序,第二个职位属于他所属的一个小组。该帖子排在第二...您有个主意
下面是我的模型
class Post(models.Model):
user = models.ForeignKey(User, related_name='posts')
group = models.ForeignKey(Group, related_name='posts')
title = models.CharField(max_length=250, unique=True)
message = models.TextField()
created_at = models.DateTimeField(auto_now=True)
class Meta:
ordering = ['-created_at']
class Group(models.Model):
name = models.CharField(max_length=250, unique=True)
members = models.ManyToManyField(User, through='GroupMember')
我的views.py
class Homepage(TemplateView):
template_name = 'home.html'
def get_context_data(self, **kwargs):
context = super(Homepage, self).get_context_data(**kwargs)
posts_of_people_i_follow = []
posts_from_groups_that_i_member = []
if self.request.user.is_authenticated():
my = self.request.user
for user in my.following.all():
posts_of_people_i_follow += user.posts.all()
posts_of_people_i_follow.save()
for group in my.group_set.all():
posts_from_groups_that_i_member += group.posts.all()
posts_from_groups_that_i_member.save()
context['posts_of_people_I_follow_list'] = posts_of_people_i_follow
context['posts_from_groups_that_i_member'] = posts_from_groups_that_i_member
return context
我目前在模板中
{% for post in posts_from_groups_that_i_member %}
{{ post.title }}
{{ post.message }}
{% endfor %}
{% for post in posts_of_people_I_follow_list %}
{{ post.title }}
{{ post.message }}
{% endfor %}
选项2:在一段时间后,我一直在尝试其他方法。但这看起来真的很贵
在用户个人资料模型中
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
def get_all_posts(self):
my = self.user
all_posts_for_this_user = []
for user in my.following.all():
all_posts_for_this_user += user.posts.all()
all_posts_for_this_user.save()
for group in my.group_set.all():
all_posts_for_this_user += group.posts.all()
all_posts_for_this_user.save()
return all_posts_for_this_user
然后在我的模板中
{% for post in user.profile.get_all_posts %}
{{ post.title }}
{{ post.message }}
{% endfor %}
谁能想到更好的解决方案。还是可以
答案 0 :(得分:0)
如果我理解正确,则需要在Post模型中指定发布日期,然后可以通过Post.objects.ordey_by('post_date')
来订购帖子https://docs.djangoproject.com/en/2.1/ref/models/querysets/#django.db.models.query.QuerySet.order_by
答案 1 :(得分:0)
在查询集上使用“ order_by()”方法来修改您的视图类,该方法可获取您的帖子对象并根据其创建时间对其进行过滤(“ created_at”字段在此处很方便)。
将此添加到“首页”视图类:
def get_queryset(self):
queryset_list = Post.objects.order_by('-created_at')
进一步的阅读可以在这里找到:
https://docs.djangoproject.com/en/2.1/ref/models/querysets/
编辑
我认为模板渲染问题值得提出自己的问题?
在您的模板中,尝试以下操作:
{% for post in posts_from_groups_that_i_member %}
{% if post in posts_of_people_I_follow_list %}
{{ post.title }}
{{ post.message }}
{% endfor %}
{% endfor %}
就性能而言,它可能不是最佳选择,但它应该可以工作。让我知道你的发现。