2014-11-04 27 views
2

我使用的Django MPTT創建目錄類別的模型和我得到當我試圖建立分類模型的一審錯誤Django的MPTT ValueError異常:不能使用無作爲查詢值

>>> c = Category(name='cat1', slug='cat1') 
>>> c.save() 

錯誤:

ValueError at /admin/catalog/category/add/ 
Cannot use None as a query value 

只有當我不類別實例指向 '父' 字段出現此錯誤

class TimeStampedModel(models.Model): 
    """ 
    Abstract class for adding 'create' and 'modified' info 
    """ 
    created = models.DateTimeField(auto_now_add=True) 
    modified = models.DateTimeField(auto_now=True) 

    class Meta: 
     abstract = True 


@python_2_unicode_compatible 
class Category(MPTTModel, TimeStampedModel): 
    ''' Category model with MPTT storing approach ''' 
    name = models.CharField(max_length=128) 
    slug = models.SlugField(max_length=50, unique=True) 
    description = models.TextField(blank=True) 
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children') 
    is_active = models.BooleanField(default=True) 

    def __str__(self): 
     return self.name 

    def get_absolute_url(self): 
     return reverse('category', kwargs={'slug': self.slug}) 

    class MPTTMeta: 
     order_insertion_by = ['id'] 

我找不到錯誤在哪裏。有什麼建議嗎?

環境:

Request Method: POST 
Request URL: http://127.0.0.1:8000/admin/catalog/category/add/ 

Django Version: 1.7.1 
Python Version: 2.7.6 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'mptt', 
'sorl.thumbnail', 
'daguerre', 
'home', 
'utils', 
'accounts', 
'catalog', 
'debug_toolbar') 
Installed Middleware: 
(u'debug_toolbar.middleware.DebugToolbarMiddleware', 
'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 "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    111.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in wrapper 
    584.     return self.admin_site.admin_view(view)(*args, **kwargs) 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view 
    105.      response = view_func(request, *args, **kwargs) 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func 
    52.   response = view_func(request, *args, **kwargs) 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/django/contrib/admin/sites.py" in inner 
    204.    return view(request, *args, **kwargs) 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in add_view 
    1454.   return self.changeform_view(request, None, form_url, extra_context) 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapper 
    29.    return bound_func(*args, **kwargs) 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view 
    105.      response = view_func(request, *args, **kwargs) 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/django/utils/decorators.py" in bound_func 
    25.     return func.__get__(self, type(self))(*args2, **kwargs2) 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/django/db/transaction.py" in inner 
    394.     return func(*args, **kwargs) 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in changeform_view 
    1405.     self.save_model(request, new_object, form, not add) 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in save_model 
    1046.   obj.save() 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/mptt/models.py" in save 
    824.       right_sibling = opts.get_ordered_insertion_target(self, parent) 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/mptt/models.py" in get_ordered_insertion_target 
    193.    queryset = node.__class__._tree_manager.filter(filters).order_by(*order_by) 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/django/db/models/manager.py" in manager_method 
    92.     return getattr(self.get_queryset(), name)(*args, **kwargs) 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/django/db/models/query.py" in filter 
    691.   return self._filter_or_exclude(False, *args, **kwargs) 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/django/db/models/query.py" in _filter_or_exclude 
    709.    clone.query.add_q(Q(*args, **kwargs)) 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/django/db/models/sql/query.py" in add_q 
    1287.   clause, require_inner = self._add_q(where_part, self.used_aliases) 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/django/db/models/sql/query.py" in _add_q 
    1309.      current_negated) 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/django/db/models/sql/query.py" in _add_q 
    1314.      current_negated=current_negated, connector=connector) 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/django/db/models/sql/query.py" in build_filter 
    1142.   value, lookups = self.prepare_lookup_value(value, lookups, can_reuse) 
File "/home/oleshko/design/.virtualenvs/begemotik/local/lib/python2.7/site-packages/django/db/models/sql/query.py" in prepare_lookup_value 
    1040.     raise ValueError("Cannot use None as a query value") 

Exception Type: ValueError at /admin/catalog/category/add/ 
Exception Value: Cannot use None as a query value 

回答

3

麻煩的是在這裏:

class MPTTMeta: 
     order_insertion_by = ['id'] 

我改變 'order_insertion_by' 字段到另一個(在我的例子 '創造'),並開始工作

0

我在使用MP_node子類中的auto_now引用字段時,通過使用「node_order_by」屬性找到了此錯誤的原因....

Class Tree(MP_Node): 
    name = models.CharField(max_length=45) 
    last_modified = models.DateTimeField(auto_now=True) 
    node_order_by = ['last_modified'] 

註釋掉node_order_by或使用不同的字段並且錯誤消失。我認爲問題在於Treebeard試圖找出插入子記錄的位置,並且沒有新記錄的日期。

相關問題