python - 如何仅过滤我朋友在模板中的帖子
问题描述
我是 django 新手,正在尝试构建社交网络系统。在我看来,我正在使用配置文件变量导入我的朋友列表。现在我只想显示我朋友的帖子。但无法制定如何过滤所有帖子的逻辑。对于每种方法,我都会遇到不同类型的错误。这是视图:
@login_required
def post_comment_create_and_list_view(request):
profile = Profile.objects.select_related('user').get(user=request.user).get_all_friends_list()
#profile contains list of the friends i have
queryset = Post.objects.all_posts().filter(author__icontains=profile.values())
#post form
post_form = PostModelForm()
if 'submit_p_form' in request.POST:
post_form = PostModelForm(request.POST or None, request.FILES or None)
if post_form.is_valid():
instance = post_form.save(commit=False)
instance.author = profile
instance.save()
post_form = PostModelForm()
messages.success(request, 'Post published')
return redirect('posts:main_post_list')
#comment form
comment_form = CommentModelForm()
if 'submit_c_form' in request.POST:
comment_form = CommentModelForm(request.POST or None)
if comment_form.is_valid():
instance = comment_form.save(commit=False)
instance.user = profile
post_id = request.POST.get('post_id')
instance.post = Post.objects.get(id=post_id)
instance.save()
comment_form = CommentModelForm()
return redirect('posts:main_post_list')
context = {
'queryset': queryset,
'profile': profile,
'post_form': post_form,
'comment_form': comment_form,
}
return render(request, 'posts/main.html', context)
这是帖子模型:
class PostManager(models.Manager):
def all_posts(self):
posts = Post.objects.prefetch_related('author',"comment_posted__user",
"comment_posted__user__user",'likes')
return posts
class Post(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True, db_index=True)
content = models.TextField(db_index=True)
image = models.ImageField(upload_to='posts', validators=[FileExtensionValidator(['png', 'jpg', 'jpeg'])], blank=True)
likes = models.ManyToManyField(Profile, blank=True, related_name='profile_liked')
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name='posts', db_index=True)
objects = PostManager()
def __str__(self):
return str(self.content[:20])
这是配置文件模型:
class Profile(models.Model):
GENDER = [
('NONE', 'none'),
('MALE', 'male'),
('FEMALE', 'female')
]
name = models.CharField(max_length=200, blank=True)
id = models.UUIDField(primary_key=True, editable=False)
bio = models.TextField(default='No bio data', max_length=400)
user = models.OneToOneField(User, on_delete = models.CASCADE, related_name='profile')
gender = models.CharField(max_length=6, choices=GENDER, default='NONE')
country = CountryField()
avatar = models.ImageField(default='avatars/avatar.png', upload_to='media/avatars/')
friends = models.ManyToManyField(settings.AUTH_USER_MODEL, blank = True, related_name='friends')
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
favourite = models.CharField(max_length=300, blank=True)
slug = models.SlugField(unique=True,blank=True)
def __str__(self):
return self.user.username
def save(self, *args, **kwargs):
self.id = self.user.id
self.slug = slugify(self.user.username)
super().save(*args, **kwargs)
def get_all_friends(self):
return self.friends.all()
def get_all_friends_list(self):
friend_list= []
for friend in self.friends.all():
friend_list.append(friend.profile)
print(type(friend_list))
return friend_list
def get_absolute_url(self):
"""Get url for profile's detail view.
Returns:
str: URL for profile detail.
"""
return reverse("profiles:detail", kwargs={"slug": self.slug})
我要应用的逻辑是从我的朋友列表中获取所有帖子。不是来自每个用户。我应该使用什么方法
解决方案
请在 post_comment_create_and_list_view 中更正 author_in:
queryset = Post.objects.all_posts().filter(author__in=profile)
推荐阅读
- c++ - 自动从 Visual Studio 2017 项目中排除已删除的 .h/.cpp 文件?
- logging - 在另一个日志级别 INFO 的正文中记录级别 DEBUG
- java - 使用 gradle 迁移到 Java 11;不支持的操作异常
- javascript - 元素outerHTML的value属性为null
- javascript - 使用 jQuery 计算 22:00(今天)和 06:00(明天)之间的时间
- ios - iOS:发送推送通知的可靠方式,但让应用程序决定是否必须向用户显示?
- java - 使用 cassandra 的 Java 驱动程序在自定义 Cassandra 访问器查询中指定可选的聚类列
- javascript - How to replace the first occurrence of a character with a string in JavaScript?
- entity-framework - 如何为没有相同表名 ID 的列创建导航属性
- swift - 从 dateFormat 获取错误的日期