“功能”对象没有属性“对象”

时间:2018-12-28 12:59:57

标签: django django-models django-views

我正在尝试获取一个查询集,其中包含基于存储在模型“ 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

views.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)

1 个答案:

答案 0 :(得分:1)

似乎您的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 post更改为import 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})