我在认证方面遇到问题。我正在尝试创建令牌但是得到错误" int()参数必须是字符串,类似字节的对象或数字,而不是' dict' & #34 ;.下面是我的代码的快照。
*Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from rest_framework.authtoken.models import Token
>>> Token.objects.get_or_create(user={'password': '123456', 'username': 'username'})
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/.virtualenvs/venv/lib/python3.4/site-packages/django/db/models/manager.py", line 127, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/.virtualenvs/venv/lib/python3.4/site-packages/django/db/models/query.py", line 405, in get_or_create
return self.get(**lookup), False
File "/home/.virtualenvs/venv/lib/python3.4/site-packages/django/db/models/query.py", line 325, in get
clone = self.filter(*args, **kwargs)
File "/home/.virtualenvs/venv/lib/python3.4/site-packages/django/db/models/query.py", line 679, in filter
return self._filter_or_exclude(False, *args, **kwargs)
File "/home/.virtualenvs/venv/lib/python3.4/site-packages/django/db/models/query.py", line 697, in _filter_or_exclude
clone.query.add_q(Q(*args, **kwargs))
File "/home/.virtualenvs/venv/lib/python3.4/site-packages/django/db/models/sql/query.py", line 1309, in add_q
clause, require_inner = self._add_q(where_part, self.used_aliases)
File "/home/.virtualenvs/venv/lib/python3.4/site-packages/django/db/models/sql/query.py", line 1337, in _add_q
allow_joins=allow_joins, split_subq=split_subq,
File "/home/.virtualenvs/venv/lib/python3.4/site-packages/django/db/models/sql/query.py", line 1199, in build_filter
lookups, value)
File "/home/.virtualenvs/venv/lib/python3.4/site-packages/django/db/models/fields/related.py", line 1756, in get_lookup_constraint
lookup_class(target.get_col(alias, source), val), AND)
File "/home/.virtualenvs/venv/lib/python3.4/site-packages/django/db/models/lookups.py", line 101, in __init__
self.rhs = self.get_prep_lookup()
File "/home/.virtualenvs/venv/lib/python3.4/site-packages/django/db/models/lookups.py", line 139, in get_prep_lookup
return self.lhs.output_field.get_prep_lookup(self.lookup_name, self.rhs)
File "/home/.virtualenvs/venv/lib/python3.4/site-packages/django/db/models/fields/__init__.py", line 727, in get_prep_lookup
return self.get_prep_value(value)
File "/home/.virtualenvs/venv/lib/python3.4/site-packages/django/db/models/fields/__init__.py", line 985, in get_prep_value
return int(value)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'dict'*
尽力解决这个问题而不问。任何帮助将不胜感激。
提前致谢。
答案 0 :(得分:2)
不幸的是,get_or_create()
无法按照您展示的方式运行,也就是说,它不会跨越关系。您必须有现有用户才能创建令牌:
>>> user = User.objects.get(username='username') # Or create one
>>> Token.objects.get_or_create(user=user)
答案 1 :(得分:0)
请参阅https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/authtoken/models.py#L21了解Token
型号代码。
您必须传递User
个对象,而不仅仅是用户名/密码的组合。
首先创建用户myuser
,然后执行Token.objects.get_or_create(myuser)
。