Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从我的用户关注的用户处获取所有帖子_Python_Django Models_Django Rest Framework_Django Views - Fatal编程技术网

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
权限类执行此操作