У объекта 'function' нет атрибута 'objects' - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь получить набор запросов, который содержит сообщения, основанные на именах пользователей, которые хранятся в модели "FollowProfiles".поэтому модели и соответствующие виды выглядят следующим образом: -

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 голосов
/ 28 декабря 2018

Похоже, ваша 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})
...