【发布时间】:2019-05-16 17:22:59
【问题描述】:
简介:我有 3 个模型 user、post、group。用户可以发布帖子,但是每个帖子必须属于一个组。我有 400 个固定组。用户必须从现有的 400 个组中选择他们的帖子。用户不能添加、删除、更新group's。
进一步:
用户可以成为组的成员,当他们点击某个组时。他们会看到该组中的所有帖子。
用户可以关注-取消关注其他用户。
**我现在拥有的:**当用户登录时。在他的主页上,他看到了。他所属的每个小组的所有帖子。当所有组的所有帖子都完成时。然后他会一一看到他关注的所有人的帖子
我想要什么:我想要帖子按时间排列 示例:如果他关注的一个人刚刚写了一篇文章,那么该文章是第一个。按时间顺序,第二个职位是在他所属的一个小组中。那篇文章排在第二位......你明白了
以下是我的模型
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')
我的意见.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 %}
谁能想到更好的解决方案。或者这样可以吗
【问题讨论】:
标签: django python-3.x django-templates django-views