python - ValueError:字段 'id' 需要一个数字,但得到了 'kumarsingha922@gmail.com'
问题描述
我做了一个 django 项目,在其中我做了一个测试,我将电子邮件分配给电子邮件,但它把它作为一个 Id 解决了这个问题。这是一个 django 项目,我在其中制作了一个收据 api。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . , , . . .
模型.py
from django.db import models
from django.contrib.auth.models import AbstractBaseUser,BaseUserManager,PermissionsMixin
# Create your models here.
class UserManager(BaseUserManager):
def create_user(self,email, password, **extra_fields):
user = self.model(email, **extra_fields)
user.set_password(password)
user.save(using= self._db)
return user
class User(AbstractBaseUser,PermissionsMixin):
email = models.EmailField(max_length=255,unique=True)
name = models.CharField(max_length=255)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
objects = UserManager()
USERNAME_FIELD = "email"
test_models.py
from django.test import TestCase
from django.contrib.auth import get_user_model
class ModelTests(TestCase):
def test_create_user_with_email_sucessfully(self):
email = "kumarsingha922@gmail.com"
password = "Singh@922"
user = get_user_model().objects.create_user(
email=email,
password=password
)
self.assertEqual(user.email,email)
self.assertTrue(user.check_password(password))
错误
WARNING: Found orphan containers (recipe-api_db_1) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
Creating recipe-api_app_run ... done
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
E
======================================================================
ERROR: test_create_user_with_email_sucessfully (core.tests.test_models.ModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/django/db/models/fields/__init__.py", line 1774, in get_prep_value
return int(value)
ValueError: invalid literal for int() with base 10: 'kumarsingha922@gmail.com'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/app/core/tests/test_models.py", line 11, in test_create_user_with_email_sucessfully
user = get_user_model().objects.create_user(
File "/app/core/models.py", line 10, in create_user
user.save(using= self._db)
File "/usr/local/lib/python3.8/site-packages/django/contrib/auth/base_user.py", line 67, in save
super().save(*args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/django/db/models/base.py", line 753, in save
self.save_base(using=using, force_insert=force_insert,
File "/usr/local/lib/python3.8/site-packages/django/db/models/base.py", line 790, in save_base
updated = self._save_table(
File "/usr/local/lib/python3.8/site-packages/django/db/models/base.py", line 872, in _save_table
updated = self._do_update(base_qs, using, pk_val, values, update_fields,
File "/usr/local/lib/python3.8/site-packages/django/db/models/base.py", line 906, in _do_update
filtered = base_qs.filter(pk=pk_val)
File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 942, in filter
return self._filter_or_exclude(False, *args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 962, in _filter_or_exclude
clone._filter_or_exclude_inplace(negate, *args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 969, in _filter_or_exclude_inplace
self._query.add_q(Q(*args, **kwargs))
File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1358, in add_q
clause, _ = self._add_q(q_object, self.used_aliases)
File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1377, in _add_q
child_clause, needed_inner = self.build_filter(
File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1319, in build_filter
condition = self.build_lookup(lookups, col, value)
File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1165, in build_lookup
lookup = lookup_class(lhs, rhs)
File "/usr/local/lib/python3.8/site-packages/django/db/models/lookups.py", line 24, in __init__
self.rhs = self.get_prep_lookup()
File "/usr/local/lib/python3.8/site-packages/django/db/models/lookups.py", line 76, in get_prep_lookup
return self.lhs.output_field.get_prep_value(self.rhs)
File "/usr/local/lib/python3.8/site-packages/django/db/models/fields/__init__.py", line 1776, in get_prep_value
raise e.__class__(
ValueError: Field 'id' expected a number but got 'kumarsingha922@gmail.com'.
----------------------------------------------------------------------
Ran 1 test in 0.115s
FAILED (errors=1)
Destroying test database for alias 'default'...
解决方案
第一个参数__init__
是 id 而不是电子邮件,请改用关键字参数
user = self.model(email=email, **extra_fields)
推荐阅读
- javascript - Css 不适用于 React 中的 intro.js 模块
- php - PHP/MYSQL:使用多种类型的用户登录
- reactjs - React Bootstrap Tabs 组件的过渡道具不起作用
- vim - 执行`write!xsel -b`时如何禁用“按ENTER或键入命令继续”
- python - 将json转换为spacy格式
- c# - Random() 乘以 2^32 - 1 总是返回最后一位
- c# - .NET Core 范围的依赖注入不适用于 MediatR
- django - Django uninstalled after installing django-debug-toolbar in docker container, how to install it without un installing django?
- jenkins - 詹金斯 - 手动构建
- python - Python: Having trouble calling classes from dicts