【发布时间】:2021-04-18 20:09:57
【问题描述】:
我收到此错误:__str__ returned non-string (type NoneType) ,但前提是用户是通过 HTTP 发布请求创建的。如果我通过普通的 Django 管理面板创建用户,我可以删除该用户。
我还尝试打印每种类型的 HTTP Post 收入并得到这个:
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'int'>
<class 'int'>
<class 'str'>
所以每个字段都是一个 str 或一个整数。可能是什么问题?
这是我的模型: 模型.py
class Account(AbstractBaseUser):
userid = models.AutoField(primary_key=True)
username = models.CharField(max_length=50, unique=True)
firstname = models.CharField(max_length=200)
lastname = models.CharField(max_length=200)
email = models.EmailField(max_length=45, unique=True)
verified = models.BooleanField(default=False)
age = models.IntegerField(default=0)
date_joined = models.DateTimeField(verbose_name="date joined", auto_now_add=True)
last_login = models.DateTimeField(verbose_name="last login", auto_now=True)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
USERNAME_FIELD = "username"
REQUIRED_FIELDS = ["firstname", "lastname", "email"]
objects = MyAccountManager()
def __str__(self):
return str(self.username)
# For checking permissions. to keep it simple all admin have ALL permissons
def has_perm(self, perm, obj=None):
return self.is_admin
# Does this user have permission to view this app? (ALWAYS YES FOR SIMPLICITY)
def has_module_perms(self, app_label):
return True
views.py
@api_view(['POST', ])
def registration_view(request):
if request.method == 'POST':
serializer = RegistrationSerializer(data=request.data)
data = {}
if serializer.is_valid():
account = serializer.save()
data['response'] = 'successfully registered new user.'
data['firstname'] = account[0].firstname
data['lastname'] = account[0].lastname
data['email'] = account[0].email
data['username'] = account[0].username
data['age'] = account[0].age
token = Token.objects.get(user = account[0]).key
data['token'] = token
else:
data = serializer.errors
print(data)
return Response(data)
serializer.py
class RegistrationSerializer(serializers.ModelSerializer):
password2 = serializers.CharField(style={'input_type': 'password'}, write_only=True)
class Meta:
model = Account
fields = ['firstname', 'lastname', 'email', 'username', 'age', 'password', 'password2']
extra_kwargs = {
'password': {'write_only': True}
}
def save(self):
account = Account(
firstname = self.validated_data['firstname'],
lastname = self.validated_data['lastname'],
email = self.validated_data['email'],
username = self.validated_data['username'],
age = self.validated_data['age'],
)
password = self.validated_data['password']
password2 = self.validated_data['password2']
username = self.validated_data['username']
if password != password2:
raise serializers.ValidationError({'password': 'Passwords must match.'})
Not errors = dict()
the try:
error validate_password(password=password)
->
-> except ValidationError as e:
-> errors['password'] = list(e.messages)
if errors:
raise serializers.ValidationError(errors)
account.set_password(password)
account.save()
【问题讨论】:
-
分享更多细节和代码
-
如果你想返回一个字符串,试着把它转换成这样的字符串 "str(string_variable)"
-
是的,我有这个。我添加了我的模型。如果您需要更多,请写
-
什么函数是错误的,告诉我你调用函数的代码
-
这就是问题所在。我不知道。我没有收到错误哪里错误是
标签: django django-rest-framework