Error: 'NoneType' object has no attribute 'strip'

瀏覽次數:2,285 次
跳到第一則未讀訊息

Danish Ali

未讀,
2014年12月1日 清晨7:12:452014/12/1
收件者:django...@googlegroups.com
Hello,

I am getting this error: Error: 'NoneType' object has no attribute 'strip'
I have created a model and I am trying to autofill slug field in it. When I save the record in database I get this error: Error: 'NoneType' object has no attribute 'strip'

My model is:

from django.db import models
from autoslug import AutoSlugField

# Create your models here.

class Shop(models.Model):
    name = models.CharField(max_length=200)
    image = models.CharField(max_length=200)
    description = models.TextField()
    slug = models.SlugField(null=True, blank=True)
    slug = AutoSlugField(populate_from='name')


If I remove: slug = AutoSlugField(populate_from='name') then it works fine. So, can someone tell me what is the issue here?

Thanks 

Kelvin Wong

未讀,
2014年12月1日 清晨7:36:522014/12/1
收件者:django...@googlegroups.com
Comment out the earlier slug field. What happens?

# slug = models.SlugField(null=True, blank=True)

K

Danish Ali

未讀,
2014年12月1日 上午8:11:172014/12/1
收件者:django...@googlegroups.com
still same error.

Jani Tiainen

未讀,
2014年12月1日 上午8:15:082014/12/1
收件者:django...@googlegroups.com
How are you trying to set data and trying to save to database (used commands would be helpful)

--

Jani Tiainen

Danish Ali

未讀,
2014年12月1日 上午8:16:302014/12/1
收件者:django...@googlegroups.com
I am using admin to enter data.
This is the URL from where I am trying to save records: http://127.0.0.1:8000/admin/product/shop/add/

Vijay Khemlani

未讀,
2014年12月1日 上午8:21:002014/12/1
收件者:django...@googlegroups.com
Have you tried following the stacktrace that resulted in the error? 

Does it fail when trying to strip the contents of the "name" field?

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/b6a557f5-5a11-4f02-bc22-2823a49b9495%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

Kelvin Wong

未讀,
2014年12月1日 上午8:26:262014/12/1
收件者:django...@googlegroups.com
Post the full trace. I looked at the source for auto slug field and they don't use strip, so the source of this error must be somewhere else. You are looking for code like this:

slug = None
slug.strip()

K

Danish Ali

未讀,
2014年12月1日 上午8:30:152014/12/1
收件者:django...@googlegroups.com
I think it fails when it tries to stip content of name. Should I paste stacktrace here. Because I do not get any clue from stacktrace about the problem :/

Jani Tiainen

未讀,
2014年12月1日 上午8:34:052014/12/1
收件者:django...@googlegroups.com
On Mon, 1 Dec 2014 10:20:24 -0300
Vijay Khemlani <vkhe...@gmail.com> wrote:

> Have you tried following the stacktrace that resulted in the error?
>
> Does it fail when trying to strip the contents of the "name" field?
>

Or maybe that library where field AutoSlug comes from isn't compatible
with your version of Django?

--

Jani Tiainen

Danish Ali

未讀,
2014年12月1日 上午8:35:562014/12/1
收件者:django...@googlegroups.com
I am not sure about that. 
is there any other easy way to get autofill slug then :)

Danish Ali

未讀,
2014年12月2日 上午9:58:002014/12/2
收件者:django...@googlegroups.com
can someone help please ?

Mike Dewhirst

未讀,
2014年12月2日 下午5:55:032014/12/2
收件者:django...@googlegroups.com
On 3/12/2014 1:58 AM, Danish Ali wrote:
> can someone help please ?

I haven't been watching this thread but I just solved a similar problem
with 'NoneType is not iterable'

My problem was fixed when I ensured the functions involved got passed a
type they were expecting.

I'm guessing you should work around the problem by avoiding autofill for
the moment and slugify in the model.save method.
> --
> You received this message because you are subscribed to the Google
> Groups "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to django-users...@googlegroups.com
> <mailto:django-users...@googlegroups.com>.
> To post to this group, send email to django...@googlegroups.com
> <mailto:django...@googlegroups.com>.
> Visit this group at http://groups.google.com/group/django-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/a1180919-7547-493a-856c-22252fa6678e%40googlegroups.com
> <https://groups.google.com/d/msgid/django-users/a1180919-7547-493a-856c-22252fa6678e%40googlegroups.com?utm_medium=email&utm_source=footer>.

Danish Ali

未讀,
2014年12月3日 上午8:18:152014/12/3
收件者:django...@googlegroups.com
I also used this method. But I got same error in this method too.

def save(self, *args, **kwargs):
    self.slug = slugify(self.name)
    super(Shop, self).save(*args, **kwargs)

Please let me know if this is correct or not. 

Babatunde Akinyanmi

未讀,
2014年12月3日 下午1:30:452014/12/3
收件者:Django users

At this point i think it will be good to paste the stacktrace here

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.

Danish Ali

未讀,
2014年12月3日 下午2:59:422014/12/3
收件者:django...@googlegroups.com
this is stacktrace when I use: slug = AutoSlugField(populate_from='name') in my model


Environment:


Request Method: POST

Django Version: 1.7.1
Python Version: 3.4.2
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'product')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')


Traceback:
File "e:\python\lib\site-packages\django\core\handlers\base.py" in get_response
  111.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "e:\python\lib\site-packages\django\contrib\admin\options.py" in wrapper
  584.                 return self.admin_site.admin_view(view)(*args, **kwargs)
File "e:\python\lib\site-packages\django\utils\decorators.py" in _wrapped_view
  105.                     response = view_func(request, *args, **kwargs)
File "e:\python\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func
  52.         response = view_func(request, *args, **kwargs)
File "e:\python\lib\site-packages\django\contrib\admin\sites.py" in inner
  204.             return view(request, *args, **kwargs)
File "e:\python\lib\site-packages\django\contrib\admin\options.py" in add_view
  1454.         return self.changeform_view(request, None, form_url, extra_context)
File "e:\python\lib\site-packages\django\utils\decorators.py" in _wrapper
  29.             return bound_func(*args, **kwargs)
File "e:\python\lib\site-packages\django\utils\decorators.py" in _wrapped_view
  105.                     response = view_func(request, *args, **kwargs)
File "e:\python\lib\site-packages\django\utils\decorators.py" in bound_func
  25.                 return func.__get__(self, type(self))(*args2, **kwargs2)
File "e:\python\lib\site-packages\django\db\transaction.py" in inner
  394.                 return func(*args, **kwargs)
File "e:\python\lib\site-packages\django\contrib\admin\options.py" in changeform_view
  1405.                 self.save_model(request, new_object, form, not add)
File "e:\python\lib\site-packages\django\contrib\admin\options.py" in save_model
  1046.         obj.save()
File "e:\python\lib\site-packages\django\db\models\base.py" in save
  591.                        force_update=force_update, update_fields=update_fields)
File "e:\python\lib\site-packages\django\db\models\base.py" in save_base
  619.             updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "e:\python\lib\site-packages\django\db\models\base.py" in _save_table
  700.             result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
File "e:\python\lib\site-packages\django\db\models\base.py" in _do_insert
  733.                                using=using, raw=raw)
File "e:\python\lib\site-packages\django\db\models\manager.py" in manager_method
  92.                 return getattr(self.get_queryset(), name)(*args, **kwargs)
File "e:\python\lib\site-packages\django\db\models\query.py" in _insert
  921.         return query.get_compiler(using=using).execute_sql(return_id)
File "e:\python\lib\site-packages\django\db\models\sql\compiler.py" in execute_sql
  920.                 cursor.execute(sql, params)
File "e:\python\lib\site-packages\django\db\backends\utils.py" in execute
  85.             sql = self.db.ops.last_executed_query(self.cursor, sql, params)
File "e:\python\lib\site-packages\mysql\connector\django\base.py" in last_executed_query
  371.         return cursor.statement
File "e:\python\lib\site-packages\mysql\connector\django\base.py" in __getattr__
  147.         return getattr(self.cursor, attr)
File "e:\python\lib\site-packages\mysql\connector\cursor.py" in statement
  858.             return self._executed.strip()

Exception Type: AttributeError at /admin/product/shop/add/
Exception Value: 'NoneType' object has no attribute 'strip'

donarb

未讀,
2014年12月3日 下午3:29:272014/12/3
收件者:django...@googlegroups.com
Looks like a bug in MySQL/connector (although it could just be a symptom of doing the same thing in Django as the bug poster):



Danish Ali

未讀,
2014年12月3日 下午3:33:482014/12/3
收件者:django...@googlegroups.com
so is there anyway to create slug automatically other than this ?

--
You received this message because you are subscribed to a topic in the Google Groups "Django users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/django-users/HUD95ghdbsc/unsubscribe.
To unsubscribe from this group and all its topics, send an email to django-users...@googlegroups.com.

To post to this group, send email to django...@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.

For more options, visit https://groups.google.com/d/optout.



--
Regards,
Danish Ali

Collin Anderson

未讀,
2014年12月5日 上午8:51:442014/12/5
收件者:django...@googlegroups.com
Hi,

If you remove all the slug code do you still get this error? If so, then the error has nothing to do with automatically creating a slug.

Try expanding Local vars to see what "params" and "sql are.
File "e:\python\lib\site-packages\django\db\models\sql\compiler.py" in execute_sql
 
920.                 cursor.execute(sql, params)
File "e:\python\lib\site-packages\django\db\backends\utils.py" in execute
 
85.             sql = self.db.ops.last_executed_query(self.cursor, sql, params)

This does seem like a bug in mysql-connector. You may want to bring it up on the mysql-connector list. http://forums.mysql.com/list.php?50

You could also try using mysqlclient instead to see if you still have the problem. That's django's recommended connector.

Collin

Danish Ali

未讀,
2014年12月5日 上午8:55:062014/12/5
收件者:django...@googlegroups.com
If I remove slug code, then everything works fine. 
And can you tell me how can I expand the variables?

Thanks 


For more options, visit https://groups.google.com/d/optout.



--
Regards,
Danish Ali

Collin Anderson

未讀,
2014年12月6日 中午12:45:032014/12/6
收件者:django...@googlegroups.com
Hi,

Does this work? (What you've already tried, but not using autoslug at all.)

from django.utils.text import slugify

    slug = models.SlugField(null=True, blank=True)
    def save(self, *args, **kwargs):
        self.slug = slugify(self.name or '')
        super(Shop, self).save(*args, **kwargs)

If you have a "pretty" django traceback, you can click to expand where it says "▶ Local vars".

Collin

Danish Ali

未讀,
2014年12月6日 下午2:07:002014/12/6
收件者:django...@googlegroups.com
No. It also did not work. It was also giving similar error.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/df128920-673e-4134-a682-eeabbd6d2252%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.


--
Regards,
Danish Ali

Collin Anderson

未讀,
2014年12月9日 上午8:19:302014/12/9
收件者:django...@googlegroups.com
Hi,

Looking at your traceback, it doesn't look like it's calling your custom save() method. Do your current tracebacks show your custom save method?

You could try print(vars(self)) right before saving to see if there is a None that shouldn't be there.

Again, if the traceback is happening in the browser, see if you can figure out what's in the "params" dict by clicking "local vars".

Collin
回覆所有人
回覆作者
轉寄
0 則新訊息