django - “查询集”对象没有属性“用户”;

发布于 2024-12-12 05:55:01 字数 996 浏览 3 评论 0原文

我有两个模型:个人资料和头像。

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 字段(来自配置文件模型)进行搜索,并获取存储在字段 paths(来自阿凡达模型)。

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)

Any ides?

I have two models Profile and 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)

I want to do a seach on the profile_name field (from Profile model) and get the paths to the pictures stored on the field paths (from the Avatar model).

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 variable is passed from a form filed.

For some reason I'm getting this error:

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

Any ides?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蓝眼泪 2024-12-19 05:55:01

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

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

filter() returns a QuerySet also if only one object if found. If you want to return just a model instance, use get():

profile_name_search = Profile.objects.get(profile_name=usr_name)
user_avatar = Avatar.objects.filter(user=profile_name_search.user.pk)
够钟 2024-12-19 05:55:01

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

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()

如果每个用户只有一个头像,您可以使用 Avatar 中的 OneToOneField 进行配置文件,然后仅作为 profile.avatar 进行访问。

Remember that "filter" returns a query not a model. Is profile name search supposed to return possibly multiple users? If so, I think you want:

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

Otherwise you may want:

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

If there is only one avatar per user you can use a OneToOneField from Avatar to profile, and then just access as profile.avatar.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文