首页 > 解决方案 > python django的get()和filter()的区别?filter() 在获取数据时是否不考虑关联表?

问题描述

models.py
class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    profile_img = models.ImageField(upload_to='ProfileImg', default='ProfileImg/default-avatar.png')
    feedback = models.CharField(max_length=100, null = True)

views.py

使用 objects.get() 时

        user = User.objects.get(id=request.user.id)
        user.userprofile.feedback = sentiment_Value 
        user.save()

它工作正常。

但是在使用 objects.filter()

 user = User.objects.filter(id=request.user.id)
 user.userprofile.feedback = sentiment_Value 
 user.save()

我收到错误

user.userprofile.feedback = sentiment_Value
AttributeError: 'QuerySet' object has no attribute 'userprofile'

user回报

user: <QuerySet [<User: snegi8005>]>

我不知道为什么会这样。我认为 get() 和 filter() 函数的工作方式相同,唯一的区别是 get() 如果未找到任何内容则会引发异常,如果未找到匹配项,则 filter() 会返回 none。

get() 和 filter() 是如何工作的?

如果我错了,请纠正我并帮助我解决这个问题。

我还想获取 user.id 的用户数据和关联的表userprofile数据。如果找不到数据,它应该返回 none 或不应该引发异常。我知道我可以将 get() 与 try/except 块一起使用,但这对我来说代码太多了。

标签: pythonpython-3.xdjangodjango-formsdjango-views

解决方案


推荐阅读