首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

request.session[ 'pk‘] = user.pk AttributeError:'QuerySet’对象没有属性‘pk’

这个错误信息表明你在尝试将一个 QuerySet 对象的 pk 属性赋值给 request.session,但 QuerySet 对象并没有 pk 属性。通常,pk 是模型实例(即数据库记录)的一个属性,而不是整个查询集的属性。

基础概念

  • QuerySet:Django ORM 中的一个对象,表示从数据库中获取的一组记录。
  • pk:主键(Primary Key),数据库表中每条记录的唯一标识符。

问题原因

你可能在尝试获取一个用户对象并将其主键赋值给 request.session,但实际获取到的是一个 QuerySet 对象,而不是单个用户对象。

解决方法

确保你获取的是单个用户对象,而不是 QuerySet 对象。你可以使用 .get().filter().first() 等方法来获取单个对象。

示例代码

假设你有一个 User 模型,并且你想获取当前登录用户的主键并存储在 session 中:

代码语言:txt
复制
from django.shortcuts import get_object_or_404
from .models import User

def login_view(request):
    # 假设你已经通过某种方式获取了用户对象
    user = get_object_or_404(User, username=request.POST['username'])
    
    # 将用户的主键存储在 session 中
    request.session['pk'] = user.pk
    
    # 其他逻辑...

应用场景

这个错误通常出现在用户登录、权限验证等场景中,当你需要获取当前登录用户的信息并存储在 session 中时。

参考链接

通过这种方式,你可以确保获取到的是单个用户对象,而不是 QuerySet 对象,从而避免 AttributeError 错误。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Django之用户认证组件

    authenticate(username='xxx',password='xxxx') #需要提供两个参数,username,password关键字参数 如果auth_user表中存在这个用户,会返回一个user对象...如果用户不存在,返回None   2,login(request,user) login(request,user)主要完成以下:把用户的id放入session表中的数据里 1,注入session信息:request.session...['user_id']=user.pk from django.contrib.auth import authenticate, login def my_view(request):...二、user对象   只要登录过的用户,访问任何视图的时候都可以使用request.user对象,这就是一个user对象,request.user.name就可以拿到用户的名字,request.user.email...除此之外,user对象还拥有以下方法:   1,user对象的is_authenticated()   如果session表里有你的登录记录,那返回值为True,可以用来验证用户是否登录过。

    59430

    Django(55)GenericAPIView源码分析

    8个方法,接下来一个个分析 类属性 queryset = None serializer_class = None lookup_field = ‘pk’ lookup_url_kwarg = None...如果没什么逻辑,可以直接写在视图的类属性中,如果逻辑比较复杂,也可以重写get_queryset方法用来返回一个queryset对象。...也是可以通过直接设置这个属性,也可以通过重写get_serializer_class来实现。 lookup_field 在检索的时候,根据什么参数进行检索。默认是pk,也就是主键。...__name__ ) # 定义queryset属性,获取父类的queryset,如果父类没有定义类属性`queryset`,那么默认值就是None,就会报上面断言的错误...(query, many=many) # 如果数据对象queryset对象,many需要为True return APIResponse(results=serializer.data

    39310

    DRF框架(六)——view视图里面继承GenericAPIView

    pk确定唯一操作对象 单操作就走get_object()方法(包括单查,单增等) 3)get_serializer():从类属性serializer_class中获得serializer的序列化类...= BookInfo.objects.all() 提供的关于数据库查询的属性与方法 1.get_queryset() 从类属性queryset中获得model的queryset数据 ,查询多个数据 2....get_object() 从类属性queryset中获得model的queryset数据,再通过有名分组pk来确定唯一操作对象。...获取序列化器对象 详情页视图使用:(也就是在详情的view里面的方法中,我们还可以定义以下两个属性) lookup_field 自定义主键 有名分组的查询,默认是’pk’ lookup_url_kwarg...()方法根据pk参数查找queryset中的数据对象 serializer = self.get_serializer(book) return Response(serializer.data

    62530

    Python进阶41-drf框架(三)

    = kwargs.get('pk') ## 将单改群改的数据都格式化成pks=[需要修改的对象主键标识] | request_data = [每个要修改对象对应的的修改数据]...book_query, many=True) book_data = book_ser.data return APIResponse(results=book_data)  代码没有改变...总结: 1.get_queryset():从类属性queryset中获得model的queryset数据 2.get_object():从类属性queryset中获得model的queryset数据,...再通过有名分组pk确定唯一操作对象 当然也可以自定义主键的有名分组名称lookup_field = 'id' 3.get_serializer():从类属性serializer_class中获得serializer...():从类属性queryset中获得model的queryset数据 # 2)get_object():从类属性queryset中获得model的queryset数据,再通过有名分组pk确定唯一操作对象

    54320

    drf之请求、响应、视图

    注意: 该方法在提供序列化器对象的时候,会向序列化器对象的context属性补充三个数据:request、format、view,这三个数据对象可以在定义序列化器时使用。...-request 当前视图的请求对象 -view 当前请求的类视图对象 -format 当前请求期望返回的数据格式 提供的关于数据库查询的属性与方法 属性queryset  指明使用的数据查询集...方法: get_queryset(self) :返回视图使用的查询集,主要用来提供给Mixin扩展类使用,是列表视图与详情视图获取数据的基础,默认返回queryset属性,可以重写 get_object...要传queryset对象,查询了所有的图书 # serializer_class使用哪个序列化类来序列化这堆数据 queryset = Book.objects # queryset...**在ViewSet中,没有提供任何动作action方法,需要我们自己实现action方法。

    2.1K20

    DRF二级视图GenericAPIView

    列表视图与详情视图通用 queryset 应用于从此视图返回对象的查询集。通常,您必须设置此属性或覆盖该get_queryset()方法。...如果您要覆盖视图方法,请务必调用get_queryset()而不是直接访问此属性。 serializer_class 应该用于验证和反序列化输入以及序列化输出的序列化器类。...通常,您必须设置此属性或覆盖该get_serializer_class()方法。 详情视图使用 lookup_field 应该用于执行单个模型实例的对象查找的模型字段。默认为’pk’....方法 列表视图与详情视图通用 get_queryset(self) 返回视图使用的查询集,是列表视图与详情视图获取数据的基础,默认返回queryset属性,可以重写,例如: def get_queryset...详情视图使用 get_object(self) 返回详情视图所需的模型类数据对象,默认使用lookup_field参数来过滤queryset。 在视图中可以调用该方法获取详情信息的模型类对象

    69810

    Django内置的通用类视图及实例

    方法: get_queryset():获取此视图的对象列表.必须是可迭代或者可以使查询集.默认返回queryset属性.可以通过重写该方法实现动态过滤.让这种方式能够工作的关键点,在于当类视图被调用时...属性: model: 视图要显示的模型 queryset: 表示对象的一个查询集.queryset的值优先于model的值. template_name: 字符串表示的模板名称. context_object_name...方法: get_queryset():返回用来获取本视图显示对象queryset.如果设置了queryset属性,get_queryset()默认返回它的值. get_object(queryset=...None):返回该视图要显示的单个对象.如果提供了queryset,该queryset将作为对象的查询源,否则,将使用get_queryset().get_object()从视图的所有参数中查找pk_url_kwarg...属性: tamplate_name: success_url: model: queryset: context_object_name: pk_url_kwarg: **方法:* get_object

    2.9K40

    Django Rest Framework

    1)属性 基本属性queryset: 用于返回query对象集合,也可以使用get_queryset()方法。...lookup_field: 模型的字段应该用于执行对象查找个别的模型实例 lookup_url_kwarg:URL应该用于对象查找关键字参数 分页属性: pagination_class: 用于返回一个分页列表视图的分页类...ListModelMixin:提供list方法,列出queryset CreateModelMixin: 提供create方法,创建和保存一个Model对象 RetrieveModelMixin:提供retrieve...RetrieveModelMixin,UpdateModelMixin,DestroyModelMixi 5、视图集合ViewSets 允许将一组相关的逻辑视图在一个类,ViewSet类是一个简单类型的基于类的观点,没有提供任何方法处理程序如...=None): pass 可以通过访问^users/{pk}/set_password/$来访问改视图 ViewSets的API参考 .ViewSet: 继承了APIView,可以使用一些标准的属性例如

    2.3K60
    领券