首页 > 解决方案 > “函数”对象没有属性“对象”

问题描述

我正在尝试获取一个查询集,其中包含基于存储在模型“FollowingProfiles”中的用户名的帖子。所以模型和相应的视图如下:-

from django.contrib.auth.models import User

class Profile(models.Model):
    Follwers=models.IntegerField(default='0')
    user=models.OneToOneField(User,on_delete=models.CASCADE,primary_key=True)
    bio=models.TextField(max_length=120,blank=True)
    location=models.CharField(max_length=30,blank=True)
    birth_date=models.DateField(null=True,blank=True)
    verified=models.BooleanField(default=False)
    ProfilePic=models.ImageField(upload_to='UserAvatar',blank=True,null=True)

    def __str__(self):
        return self.user.username

@receiver(post_save,sender=User)
def update_user_profile(sender,instance,created,**kwargs):
    if created:
        Profile.objects.create(user=instance)
    instance.profile.save()

class FollowingProfiles(models.Model):
    Profile=models.ForeignKey(Profile,on_delete=models.CASCADE)
    ProfileName=models.CharField(max_length=120,blank=True,null=True)

    def __str__(self):
        return self.ProfileName

class post(models.Model):
    Profile=models.ForeignKey(Profile,on_delete=models.CASCADE)
    Picture=models.ImageField(upload_to='PostMedia',blank=True,null=True)
    DatePosted=models.DateTimeField(default=timezone.now)
    Content=models.TextField(blank=True,null=True)

    def __str__(self):
        return self.Profile.user.username

视图.py

def feed(request):
    if request.user.is_authenticated:
        userprofile=FollowingProfiles.objects.filter(Profile__user=request.user)
        for p in userprofile:
            postuser=post.objects.filter(Profile__user__username=p.ProfileName)
            usrpost+=postuser
        return render(request,'feed/feed.html',{'usrpost':usrpost})
    else:
        return redirect('signup')

它产生以下错误:-

function' object has no attribute 'objects'
C:\Users\G COMTECH SYSTEM\django-projects\saporaapp\sapora\views.py in feed, line 45
line 45 is 
     postuser=post.objects.filter(Profile__user__username=p.ProfileName)

标签: djangodjango-modelsdjango-views

解决方案


似乎您的post模型与某些post声明为函数的模型冲突。我的建议是遵循PEP8来命名你的类、函数、变量等,以避免这种情况。

在您的特定情况下,我会将post模型重命名为Post,因为最好以 CamelCase 样式命名类。但是对于您使用 CamelCase 的字段,最好使用下划线: 像这样:

class Post(models.Model):
    profile = models.ForeignKey(Profile,on_delete=models.CASCADE)
    picture = models.ImageField(upload_to='PostMedia',blank=True,null=True)
    date_posted = models.DateTimeField(default=timezone.now)
    content = models.TextField(blank=True,null=True)

如果你想让它快速工作,找到post可以在view.py文件中声明为函数的位置并重命名它。如果它是导入的东西,您可以更改from mymodule import postimport mymodule然后调用函数为mymodule.post

usrpost没有声明,这是一个没有for循环的更好的解决方案:

userprofile_names=FollowingProfiles.objects.filter(Profile__user=request.user).values_list('ProfileName', flat=True)
usrpost=post.objects.filter(Profile__user__username__in=userprofile_names)
return render(request,'feed/feed.html',{'usrpost':usrpost})

推荐阅读