【问题标题】:django - "QuerySet' object has no attribute 'user'django - “QuerySet”对象没有属性“用户”
【发布时间】:2011-12-14 11:45:59
【问题描述】:

我有两个模型 Profile 和 Avatar。

models.py

class Profile(models.Model):
    user = models.ForeignKey(User)
    profile_name = models.CharField(blank=True, max_length=50)

    def __unicode__(self):
       return u'%s %s' % (self.user, self.profile_name)  


class Avatar(models.Model):
    user = models.ForeignKey(User)
    paths = models.CharField(max_length=100)
    def __unicode__(self):
        return u'%s %s' % (self.user,self.paths)

我想在 profile_name 字段(来自 Profile 模型)上进行搜索,并获取存储在字段 paths(来自 Avatar 模型)中的图片的路径。

view.py

profile_name_search = Profile.objects.filter(profile_name=usr_name)
user_avatar = Avatar.objects.filter(user=profile_name_search.user.id)

usr_name 变量是从表单字段传递的。

由于某种原因,我收到此错误:

'QuerySet' object has no attribute 'user'
user_avatar = Avatar.objects.filter(user=profile_name_search.user.id)

有什么办法吗?

【问题讨论】:

    标签: django django-models django-views


    【解决方案1】:

    filter() 如果只找到一个对象,也会返回QuerySet。如果您只想返回一个模型实例,请使用get()

    profile_name_search = Profile.objects.get(profile_name=usr_name)
    user_avatar = Avatar.objects.filter(user=profile_name_search.user.pk)
    

    【讨论】:

    • 如果 profile_name_search 返回多个用户名怎么办?例如,我想像这样返回所有类似于 usr_name 的用户名: profile_name_search = Profile.objects.filter(profile_name__contains=usr_name)
    • 如果您希望返回多个,请使用filter()。如果您使用get() 并找到多个实例,则会引发异常MultipleObjectsReturned。见django documentation
    【解决方案2】:

    请记住,“过滤器”返回的是查询而不是模型。个人资料名称搜索是否应该返回可能的多个用户?如果是这样,我想你想要:

    users = User.objects.filter( profile_set__profile_name = usr_name )
    user_avatar = Avatar.objects.filter( user__in = users )
    

    否则你可能想要:

    profile = Profile.objects.get( profile_name = usr_name )
    avatars = profile.avatar_set.all()
    

    如果每个用户只有一个头像,您可以使用头像中的 OneToOneField 来配置文件,然后以 profile.avatar 的身份访问。

    【讨论】:

    • 我意识到,如果我可以获得所有用户名“喜欢”usr_name 的用户,那么对于我的应用程序会更有帮助。因此,如果我得到多个记录/用户,而不是只有一个用户。所以不是我在上面写的,我有这个: profile_name_search = Profile.objects.filter(profile_name__contains=usr_name) 。在这种情况下,如何获取每个用户的头像?
    猜你喜欢
    • 2020-10-31
    • 1970-01-01
    • 2021-08-05
    • 2017-06-22
    • 2013-05-10
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多