精确查找的QuerySet值必须使用切片限制为一个结果

加根

我正在尝试通过外键使用一对多关系生成查询集。我正在尝试从当前登录的用户获取配置文件实例,然后获取配置文件,之后,我将提取帖子以及评论。关联的模型是:

#models.py
from django.contrib.auth.models import User

#this is how profile of a sample user, say MAX looks like
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

class comment(models.Model):
    post=models.ForeignKey(post,on_delete=models.CASCADE)
    Profile=models.ForeignKey(Profile,on_delete=models.CASCADE)
 Content=models.CharField(max_length=120,null=False,blank=False,default='it is sapora')

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

#views.py
def feed(request):
    if request.user.is_authenticated:
        profile=Profile.objects.filter(user=request.user)
        userfollowing=FollowingProfiles.objects.filter(Profile=profile)
        for following in userfollowing:
            username=following.ProfileName
            useraccount=User.objects.filter(username=username)
            mprofile=Profile.objects.filter(user=useraccount)
            Post=post.objects.filter(Profile=mprofile)
            comment=comment.objects.filter(post=Post)
            final_post_queryset=final_post_queryset+Post
            final_comment_queryset=final_comment_queryset+comment
        return render(request,'feed/feed.html',{'final_comment_queryset':final_comment_queryset,'final_post_queryset':final_post_queryset})
    else:
        return redirect('signup')

它产生以下错误:-精确查找的QuerySet值必须使用切片限制为一个结果。

鲁德拉

您在此处提供的代码有很多问题。

第一:

if request.user.is_authenticated:
    profile=Profile.objects.filter(user=request.user)  <--- Here

配置文件与用户具有OneToOne关系。因此,应该可以通过进行访问request.user.profile

同样在后面的部分中,您将queryset与Django Object混合在一起并尝试使它们无效,这是没有意义的。如果您想查看评论和帖子,则可以像下面这样简单地将其作为模板:

{% if user.is_authenitcated %}
    {% for post in user.profile.post_set.all %}
          {{ post }}
          {% for comment in post.comment_set.all %}
              {{ comment }}
          {% endfor %}
    {% endfor %}
{% endif %}

此代码可在您项目的任何模板中使用。有关参考,请参阅相关对象文档

更新资料

您可以使用ManyToMany关系来设置following个人资料:

class Profile(models.Models):
    # rest of the code
    following = models.ManyToManyField("self", blank=True)

并在模板中显示他们的帖子,如下所示:

{% if user.is_authenitcated %}
    {% for profile in user.profile.following.all %}
          {% for post in profile.post_set.all %}
              {{ post }}
          {% endfor %}
    {% endfor %}
{% endif %}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Django:精确查找的 QuerySet 值必须使用切片限制为一个结果

错误:精确查找的 QuerySet 值必须使用切片限制为一个结果

需要帮助解决错误“精确查找的 QuerySet 值必须限制为使用切片的一个结果”

ValueError对于精确查找的QuerySet值必须限制为使用Django视图切片的一个结果

Django objects.get():用于精确查找的QuerySet值必须使用切片限制为一个结果

必须使用切片将精确查找的QuerySet值限制为一个结果。过滤错误

Django 信号:精确查找的 QuerySet 值必须使用切片限制为一个结果

Django错误:必须使用切片将精确查找的QuerySet值限制为一个结果?

django错误,“用于精确查找的QuerySet值必须限制为使用切片的一个结果”

如何让用户关联到另一个模型 DRF。ValueError:精确查找的 QuerySet 值必须使用切片限制为一个结果

如何获得解决此错误的信息“精确查找的QuerySet值必须限制为使用切片的一个结果。”

我如何解决精确查找的 QuerySet 值必须限制为使用切片的一个结果。姜戈

如何解决“用于精确查找的QuerySet值必须限制为使用切片的一个结果。” Django中的错误

精确查询的QuerySet值必须使用slicing-Django限制为一个结果

将查找请求限制为一个结果

在不使用切片的情况下,限制了Django QuerySet的结果数量

numpy:尝试在数组的一个切片的一个切片上设置值

使用一个新值更改列表切片的值

使用iloc时,“试图从DataFrame的切片副本上设置一个值”错误

如何使用 tf.gather 从第一个轴切片值?

append 的第一个参数必须是切片;有无类型 nil

切片索引必须有一个 __index__ 方法

基于另一个切片器选择的 Power BI 切片器的初始值

如何使用另一个切片作为分隔符来分割切片?

django-在结果受限制的queryset上切片/过滤后过滤

“并发”限制为10是否保证10个并行切片运行?

使用地图时的熊猫警告:试图在DataFrame的切片副本上设置一个值

将SQL结果限制为使用“ in”搜索的每个pkey的一个结果

使用切片查找 np 数组的最大列值