Django关联默认User模型筛选自定义Account模型获取status报错如何解决
问题原因
- 你从CSV读取到的
user = row[1]是字符串格式的用户名,而Account的user外键字段要求传入User模型实例或者用户ID的整数值,直接传字符串会触发类型错误。 - 你之前使用
filter().values_list()返回的是可迭代的QuerySet对象,不是单个status的字符串值,直接存入模型字段会得到错误的存储内容。
解决方法
场景1:需要查询CSV中读取的用户名对应的status
直接通过外键跨表查询,用get()获取单个结果即可:
# 写在循环内部替换你原来的Status赋值代码 try: # 跨user外键查询关联User的username字段,直接取status值 status_value = Account.objects.values_list('status', flat=True).get(user__username=user) except Account.DoesNotExist: # 处理对应用户没有Account扩展数据的情况,自行设置默认值 status_value = ""
之后创建auditsModel的时候直接传status_value即可:
auditsModel.objects.create( qs_login = user, Status = status_value, )
场景2:你实际需要取当前登录用户request.user的status
因为Account和User是一对一关联,无需写ORM查询,直接通过反向关联取值即可:
# 确保用户已经登录,且对应有Account对象的前提下直接取值 status_value = request.user.account.status # 兼容没有Account的情况可以加判断 if not hasattr(request.user, 'account'): status_value = ""
之前写法的问题说明
Status = Account.objects.filter(user = user).values_list('status', flat=True):第二个参数user是字符串,不是User实例/用户ID,触发类型错误。Status = Account.objects.filter(user__username = user).values_list('status', flat=True):逻辑正确,但filter返回的是查询集,不是单个值,你需要用get()替换filter(),或者在末尾加.first()取第一个结果。
内容的提问来源于stack exchange,提问作者user12722902
相关产品推荐
相关产品推荐

