![](/img/trans.png)
[英]TypeError: sequence item 12: expected str instance, NoneType found
[英]Registration - sequence item 0: expected str instance, NoneType found
Django 版本:3.0.8 - Python 版本:3.7.8
我最近在我的 Django 站點上發現了一個錯誤。 當用戶想要創建一個帳戶時,它會返回此錯誤:序列項 0:預期的 str 實例,已找到 NoneType
手術:
第一步出現錯誤,創建帳戶(Active = False),沒有發送電子郵件並顯示錯誤。
Traceback (most recent call last):
File "/home/eodj89/virtualenv/DjangoPro/3.7/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/home/eodj89/virtualenv/DjangoPro/3.7/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/eodj89/virtualenv/DjangoPro/3.7/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/eodj89/DjangoPro/user/views.py", line 45, in signup
user.save()
File "/home/eodj89/virtualenv/DjangoPro/3.7/lib/python3.7/site-packages/django/contrib/auth/base_user.py", line 66, in save
super().save(*args, **kwargs)
File "/home/eodj89/virtualenv/DjangoPro/3.7/lib/python3.7/site-packages/django/db/models/base.py", line 746, in save
force_update=force_update, update_fields=update_fields)
File "/home/eodj89/virtualenv/DjangoPro/3.7/lib/python3.7/site-packages/django/db/models/base.py", line 795, in save_base
update_fields=update_fields, raw=raw, using=using,
File "/home/eodj89/virtualenv/DjangoPro/3.7/lib/python3.7/site-packages/django/dispatch/dispatcher.py", line 175, in send
for receiver in self._live_receivers(sender)
File "/home/eodj89/virtualenv/DjangoPro/3.7/lib/python3.7/site-packages/django/dispatch/dispatcher.py", line 175, in <listcomp>
for receiver in self._live_receivers(sender)
File "/home/eodj89/DjangoPro/user/models.py", line 479, in create_user_profile
UserProfile.objects.create(user=instance)
File "/home/eodj89/virtualenv/DjangoPro/3.7/lib/python3.7/site-packages/django/db/models/manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/eodj89/virtualenv/DjangoPro/3.7/lib/python3.7/site-packages/django/db/models/query.py", line 433, in create
obj.save(force_insert=True, using=self.db)
File "/home/eodj89/DjangoPro/user/models.py", line 346, in save
address = " ".join([self.full_address])
Exception Type: TypeError at /account/register/
Exception Value: sequence item 0: expected str instance, NoneType found
模型.py
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
full_address = models.CharField(null=True,blank=True,max_length=128)
latitude = models.DecimalField(max_digits=9, decimal_places=6, blank=True, default='0')
longitude = models.DecimalField(max_digits=9, decimal_places=6, blank=True, default='0')
slug = models.SlugField(editable=False)
def save(self, *args,**kwargs):
self.slug = slugify(self.user.username)
address = " ".join([self.full_address])
result = geocoder.geocode(address)
if result and len(result):
self.longitude = result[0]['geometry']['lng']
self.latitude = result[0]['geometry']['lat']
super(Profile, self).save(*args, **kwargs)
讓我簡化你看到的錯誤:
In [1]: ''.join([None])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-1-29122f69a077> in <module>
----> 1 ''.join([None])
TypeError: sequence item 0: expected str instance, NoneType found
在您的情況下,您會收到與此行相同的異常:
address = " ".join([self.full_address])
這意味着self.full_address
是None
。
同時,我認為您不需要在那里join
,因為您嘗試加入單個字符串。 你對這條線有什么期望?
所以你的模型的代碼看起來像:
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
full_address = models.CharField(null=True,blank=True,max_length=128)
latitude = models.DecimalField(max_digits=9, decimal_places=6, blank=True, default='0')
longitude = models.DecimalField(max_digits=9, decimal_places=6, blank=True, default='0')
slug = models.SlugField(editable=False)
def save(self, *args,**kwargs):
self.slug = slugify(self.user.username)
if self.full_address:
geo_code = geocoder.geocode(self.full_address)
if geo_code:
self.longitude = geo_code[0]['geometry']['lng']
self.latitude = geo_code[0]['geometry']['lat']
super(Profile, self).save(*args, **kwargs)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.