2015-04-28 45 views
3

我正在構建一個自我過濾器在網站管理應用程序的Django,對於數組中的字段包含especified值的用戶。但我無法實現原因返回錯誤。Django的list_filter查詢集迴歸,ValueError異常:值過多解壓

這是我的模型:

class Profile(Model): 
""" 
Profile 
""" 
code = CharField(
    max_length = 32, 
    verbose_name = (_(u"Código")), 
    blank = True, 
) 
user = ForeignKey(User, 
    verbose_name = (_('Usuario')), 
    related_name = 'profile', 
    blank = False, 
    unique = True, 
) 
country = CountryField(
    verbose_name = (_(u"País")), 
    blank = False, 
    default = 'CO', 
) 
preferences = CharField(
    max_length = 500, 
    verbose_name = (_(u"Preferencias")), 
    blank = True, 
) 
etc... 

這是我對這個模型管理registeer:

class ProfileAdmin(ExportMixin, ModelAdmin): 

list_display = (
    'id', 
    'user', 
    'first_name', 
    'last_name', 
    'country', 
    'isTeacher', 
    'purchased', 
    'purchasedDetails', 
    'referred', 
    'moneySpent', 
    'likesCount', 
    'created', 
    'preferences', 
) 

list_filter = (
    'country', 
    'referred', 
    PreferencesFilter, 
) 

search_fields = (
    'user__username', 
    'user__first_name', 
    'user__last_name', 
) 
site.register(Profile, ProfileAdmin) 

其中PreferencesFilter funtion是:

class PreferencesFilter(SimpleListFilter): 
title = _('Preferencias') 
parameter_name = 'preferencias' 

def lookups(self, request, model_admin): 
    return [PREFERENCES1 + PREFERENCES2] 

def queryset(self, request, queryset): 
    if not self.value(): 
     return queryset 


    return queryset.filter(preferences__contains=[self.value()]) 

爲PREFERENCES1和PREFERENCES2值分別是:

PREFERENCES1 = (
    ('Croché', 'Croché'), 
    ('Patchwork', 'Patchwork'), 
    ('Muñecos decorativos', 'Muñecos decorativos'), 
    ('Tejido dos agujas', 'Tejido dos agujas') 
) 

PREFERENCES2 = (
    ('Arreglos florales', 'Arreglos florales'), 
    ('Peinados', 'Peinados'), 
    ('Decoración de uñas', 'Decoración de uñas') 
) 

,但是當我做與過濾的搜索應用程序返回此堆棧跟蹤:

Template error: 
In template /env/local/lib/python2.7/site-packages/suit/templates/admin/search_form.html, error at line 17 
    too many values to unpack 
    7 :   {% if cl.search_fields %} 
    8 :   <input type="text" size="40" name="{{ search_var }}" value="{{ cl.query }}" id="searchbar" placeholder="{% block search_placeholder %}{% trans 'keyword'|capfirst %}{% endblock %}"{{ cl.query|yesno:' class=active,' }}>&nbsp; 
    9 :   <script type="text/javascript">document.getElementById("searchbar").focus();</script> 
    10 :   {% endif %} 
    11 :   {% spaceless %} 
    12 :   {% if cl.has_filters %} 
    13 :    {% block filters %} 
    14 :    {% if cl.has_filters %} 
    15 :     <span class="search-filters"> 
    16 :     {% for spec in cl.filter_specs %} 
    17 :     {% suit_list_filter_select cl spec %} 
    18 :     &nbsp; 
    19 :     {% endfor %} 
    20 :     </span> 
    21 :    {% endif %} 
    22 :    {% endblock %} 
    23 :   {% endif %} 
    24 :   {% endspaceless %} 
    25 : 
    26 :   <input type="submit" value="{% trans 'Search' %}" class="btn btn-info"/> 
    27 :   &nbsp; 

Traceback: 
File "/env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
137. response = response.render() 
File "/env/local/lib/python2.7/site-packages/django/template/response.py" in render 
105. self.content = self.rendered_content 
File "/env/local/lib/python2.7/site-packages/django/template/response.py" in rendered_content 
82. content = template.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/base.py" in render 
140. return self._render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/base.py" in _render 
134. return self.nodelist.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/base.py" in render 
840.     bit = self.render_node(node, context) 
File "/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node 
78.    return node.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render 
123.   return compiled_parent._render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/base.py" in _render 
134.   return self.nodelist.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/base.py" in render 
840.     bit = self.render_node(node, context) 
File "/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node 
78.    return node.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render 
123.   return compiled_parent._render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/base.py" in _render 
134.   return self.nodelist.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/base.py" in render 
840.     bit = self.render_node(node, context) 
File "env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node 
78.    return node.render(context) 
File "/home/kperez/Desarrollo/www.pleisi.com/env/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render 
123.   return compiled_parent._render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/base.py" in _render 
134.   return self.nodelist.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/base.py" in render 
840.     bit = self.render_node(node, context) 
File "/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node 
78.    return node.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render 
62.    result = block.nodelist.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/base.py" in render 
840.     bit = self.render_node(node, context) 
File "/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node 
78.    return node.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render 
62.    result = block.nodelist.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/base.py" in render 
840.     bit = self.render_node(node, context) 
File "/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node 
78.    return node.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render 
62.    result = block.nodelist.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/base.py" in render 
840.     bit = self.render_node(node, context) 
File "/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node 
78.    return node.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render 
62.    result = block.nodelist.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/base.py" in render 
840.     bit = self.render_node(node, context) 
File "/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node 
78.    return node.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/base.py" in render 
1220.      return self.nodelist.render(new_context) 
File "/env/local/lib/python2.7/site-packages/django/template/base.py" in render 
840.     bit = self.render_node(node, context) 
File "/local/lib/python2.7/site-packages/django/template/debug.py" in render_node 
78.    return node.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/defaulttags.py" in render 
305.     return nodelist.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/base.py" in render 
840.     bit = self.render_node(node, context) 
File "/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node 
78.    return node.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/defaulttags.py" in render 
389. return strip_spaces_between_tags(self.nodelist.render(context).strip()) 
File "/env/local/lib/python2.7/site-packages/django/template/base.py" in render 
840.     bit = self.render_node(node, context) 
File "/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node 
78.    return node.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/defaulttags.py" in render 
305.     return nodelist.render(context) 
File "env/local/lib/python2.7/site-packages/django/template/base.py" in render 
840.     bit = self.render_node(node, context) 
File "/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node 
78.    return node.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render 
53.    result = self.nodelist.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/base.py" in render 
840.     bit = self.render_node(node, context) 
File "/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node 
78.    return node.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/defaulttags.py" in render 
305.     return nodelist.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/base.py" in render 
840.     bit = self.render_node(node, context) 
File "/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node 
78.    return node.render(context) 
File "/env/local/lib/python2.7/site-packages/django/template/defaulttags.py" in render 
196.       nodelist.append(node.render(context)) 
File "/env/local/lib/python2.7/site-packages/django/template/base.py" in render 
1125.      return func(*resolved_args, **resolved_kwargs) 
File "/env/local/lib/python2.7/site-packages/suit/templatetags/suit_list.py" in suit_list_filter_select 
113.  choices = list(spec.choices(cl)) 
File "/env/local/lib/python2.7/site-packages/django/contrib/admin/filters.py" in choices 
103.   for lookup, title in self.lookup_choices: 

Exception Type: ValueError at /site/accounts/profile/ 
Exception Value: too many values to unpack 

我在做什麼不好,或者我應該爲解決這個麻煩做什麼。

回答

1

我沒有使用自定義過濾器,但我的猜測是線路

return queryset.filter(preferences__contains=[self.value()]) 

原因造成的問題

含有應該是一個值,而不是一個數組。 你試過了嗎?

return queryset.filter(preferences__contains=self.value()) 

編輯:

好吧,我看到現在的問題:

您試圖追加兩個元得到一個列表。元組是不可變的,並且您使用的語法不會將它們連接到列表。

改變查找到:

def lookups(self, request, model_admin): 

    newlist = list(PREFERENCES1) 
    newlist.extend(list(PREFERENCES2)) 
    return newlist 
+0

Ÿ嘗試,但現在每一個選擇這種模式在管理崩潰與錯誤 –

+0

同樣的錯誤左右逢源的時間? –

+0

查找應該返回一個元組列表,你用一個數值返回一個列表。在查找嘗試類似return [(PREFERENCES1,PREFERENCES1)+(PREFERENCES2,PREFEERENCES2))] –

相關問題