Python 从我的用户关注的用户处获取所有帖子
我想得到我的用户关注的所有用户的所有帖子 我的用户模型看起来像Python 从我的用户关注的用户处获取所有帖子,python,django-models,django-rest-framework,django-views,Python,Django Models,Django Rest Framework,Django Views,我想得到我的用户关注的所有用户的所有帖子 我的用户模型看起来像 from django.db import models from django.contrib.auth.models import AbstractUser from apps.friend_request.models import FriendRequest # Save avatar to user specific directory in media files def user_avatar_directory(
from django.db import models
from django.contrib.auth.models import AbstractUser
from apps.friend_request.models import FriendRequest
# Save avatar to user specific directory in media files
def user_avatar_directory(instance, filename):
return f'{instance.username}/avatar/{filename}'
class User(AbstractUser):
# Field that is used as the unique identifier
USERNAME_FIELD = 'email'
# Fields that are required when using createsuperuser (username_field and password fields are required by default)
REQUIRED_FIELDS = ['username', 'first_name', 'last_name']
# Fields that shall be treated as public and can be exposed to all logged-in users
PUBLIC_FIELDS = ('id', 'username', 'first_name', 'last_name', 'country')
email = models.EmailField(unique=True)
first_name = models.CharField(max_length=150)
last_name = models.CharField(max_length=150)
country = models.CharField(max_length=150, blank=True, null=True)
city = models.CharField(max_length=150, blank=True, null=True)
about = models.TextField(blank=True, null=True)
avatar = models.ImageField(upload_to=user_avatar_directory, blank=True, null=True)
followers = models.ManyToManyField(to='self', symmetrical=False, related_name='followees', blank=True)
我的后模特
from django.db import models
from django.conf import settings
class Post(models.Model):
user = models.ForeignKey(
#to=User,
to=settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='posts',
#null=True
)
content = models.CharField(
max_length=150,
blank=False
)
created = models.DateTimeField(
auto_now=True
)
liked_by = models.ManyToManyField(
#to=User,
to=settings.AUTH_USER_MODEL,
related_name='liked_posts',
blank=True
)
# TODO
# comments = Set('Comment')
# TODO sharing not yet clear what it is about
# shared = Optional('Post', reverse='sharing')
# sharing = Set('Post', reverse='shared')
def __str__(self):
return f'ID: {self.pk}: {self.content} '
class Post_Pic(models.Model):
created = models.DateTimeField(
auto_now=True
)
post_id = models.ForeignKey(
to=Post,
on_delete=models.CASCADE,
related_name='posts',
)
image = models.ImageField(
upload_to='post_pic'
)
def __str__(self):
return f'ID: {self.pk} Post: {self.post_id} File: {self.image.name}'
我的观点
class MyFollowersPosts(ListView):
"""
Get all followers
"""
queryset = Post.objects.all()
serializer_class = FollowesSerilizer
def get_queryset(self):
posts = []
for user in self.request.user.followers.all():
for post in Post.objects.filter(author=user.followed):
posts.append(post)
return posts
问题是我总是遇到这个错误,我无法找出问题出在哪里
AttributeError位于/backend/api/social/posts/follow/
“AnonymousUser”对象没有属性“followers”
请求方法:获取
请求URL:
Django版本:3.1.4
异常类型:AttributeError
异常值:“AnonymousUser”对象没有属性“followers” 异常位置:C:\Users\Dell\anaconda3\envs\motion backend\lib\site packages\django\utils\functional.py,第241行,在内部 Python可执行文件:C:\Users\Dell\anaconda3\envs\motion backend\Python.exe Python版本:3.9.1 Python路径:
['C:\Users\Dell\Desktop\day-5-django-motion-assignment', 'C:\Users\Dell\anaconda3\envs\motion backend\python39.zip', 'C:\Users\Dell\anaconda3\envs\motion backend\dll', 'C:\Users\Dell\anaconda3\envs\motion backend\lib', 'C:\Users\Dell\anaconda3\envs\motion backend', 'C:\Users\Dell\anaconda3\envs\motion backend\lib\site packages']
服务器时间:2021年1月4日星期一13:53:46+0000您的
获取查询集
应该返回一个查询集
,而不是列表。此外,您不需要通过循环获取项目,您可以通过以下方式进行查询:
from rest_framework.permissions import IsAuthenticated
class MyFollowersPosts(ListView):
# …
permission_classes = [IsAuthenticated]
def get_queryset(self):
return Post.objects.filter(author__followees=self.request.user)
来自rest\u framework.permissions导入已验证
类MyFollowersPosts(列表视图):
# …
权限\u类=[IsAuthenticated]
def get_queryset(自我):
return Post.objects.filter(author\u followees=self.request.user)
此外,用户应登录。您可以使用
IsAuthenticated
权限类执行此操作。您的get\u queryset
应该返回queryset
,而不是列表。此外,您不需要通过循环获取项目,您可以通过以下方式进行查询:
from rest_framework.permissions import IsAuthenticated
class MyFollowersPosts(ListView):
# …
permission_classes = [IsAuthenticated]
def get_queryset(self):
return Post.objects.filter(author__followees=self.request.user)
来自rest\u framework.permissions导入已验证
类MyFollowersPosts(列表视图):
# …
权限\u类=[IsAuthenticated]
def get_queryset(自我):
return Post.objects.filter(author\u followees=self.request.user)
此外,用户应登录。您可以使用IsAuthenticated
权限类执行此操作