django - 模型在 django 的视图中变成了元组。怎么回事!他妈的?
问题描述
我正在尝试将字符串(会话哈希)保存到 django 的模型中,但是出了点问题。当我尝试更新字符串时,模型变成了导致 AttributeError 的元组。
一开始,一切都在一个“帖子”功能中,但仍然无法正常工作。我试图将这些东西分成函数,但它仍然没有帮助。在分配类型(会话)说“会话”是一个模型,而不是元组之前。
查看功能代码:
def post(self, request, *args, **kwargs):
data = json.loads(request.body.decode('utf-8'))
form = self.form_class(data)
if form.is_valid():
phone = form.cleaned_data.get('phone')
code = form.cleaned_data.get('code')
password = form.cleaned_data.get('password')
session = Session.objects.get_or_create(phone=phone, user=request.user.telegramuser)
if code and password:
return utils.sign_in(session, phone, code, password)
elif code:
return utils.sign_in(session, phone, code)
elif phone:
return utils.send_code_request(session, phone)
return JsonResponse({'state': 'none'})
utils.send_code_request 和 sign_in 具有相同的结构
def send_code_request(session, phone):
result = asyncio.run(_send_code_request(phone))
# result - {
# 'state': 'ok',
# 'session': 'Hfkdi...AaF24s'
# }
if result['state'] == 'ok':
session.update_session(result.pop('session'))
return JsonResponse(result)
经理
class DefaultManager(models.Manager):
def get_or_create(self, *args, **kwargs):
try:
return self.get(*args, **kwargs)
except ObjectDoesNotExist:
return self.create(*args, **kwargs)
错误:
Internal Server Error: /sessions/add/
Traceback (most recent call last):
File "C:\Users\ipyth\Documents\projects\telegram-sendall\.env\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\ipyth\Documents\projects\telegram-sendall\.env\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\ipyth\Documents\projects\telegram-sendall\.env\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\ipyth\Documents\projects\telegram-sendall\.env\lib\site-packages\django\views\generic\base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\ipyth\Documents\projects\telegram-sendall\.env\lib\site-packages\django\contrib\auth\mixins.py", line 52, in dispatch
return super().dispatch(request, *args, **kwargs)
File "C:\Users\ipyth\Documents\projects\telegram-sendall\.env\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
return handler(request, *args, **kwargs)
File "C:\Users\ipyth\Documents\projects\telegram-sendall\sendall\views.py", line 78, in post
return utils.send_code_request(session, phone)
File "C:\Users\ipyth\Documents\projects\telegram-sendall\sendall\utils.py", line 46, in send_code_request
session.update_session(result.pop('session'))
AttributeError: 'tuple' object has no attribute 'update_session'
[23/Jul/2019 23:51:35] "POST /sessions/add/ HTTP/1.1" 500 86600
解决方案
get_or_create
确实返回对象和创建标志的元组。要么捕获两者:
session, created = Session.objects.get_or_create(phone=phone...)
或者,create
改为使用。
或者更好的是,使用表单保存方法:
session = form.save()
推荐阅读
- ffmpeg - ffmpeg 中的输出流 0:1 错误中的无效丢弃 st:0 和非单调 DTS
- oracle - PowerBI Web:连接到 Oracle 云数据库
- r - 取消嵌套的 tidydrc 模型
- vb.net - 在 OpenGL 中显示位图
- node.js - 当本地服务器和 SPA 在不同端口上运行时使用 auth-cookie
- vim - Vim - 在折叠上方添加一行到折叠
- javascript - 将数组拆分为不同大小的块(4、3、3、3、4、3、3、3 等)
- python - 如何创建要在 Django 单元测试中使用的虚拟 pdf 文件
- c# - 如何使 RectTransform 跟随位于不同父级下的另一个 RectTransform?
- automation - Office365:清单和工作流程