2012-11-17 25 views
0

顯示列表我有一個用戶點擊了一系列的複選框,以確定哪些領域某一個地方是有關(即,娛樂,體育等),然後我用檢索:從的GetList Django的

areas_related=request.POST.getlist('areas_related') 

當我在哪些方面不同的地方都與不同的視圖中顯示這些值我使用:

    {% for service in services %} 
        {{service.areas_related}} 
        {% endfor %} 

...但它顯示爲:

[u'Education', u'Food'] 

..如果我嘗試使循環遍歷列表,每個單獨的字符都會一次顯示一行。即, [ ü ' E etc.Is there a filter我可以用來不顯示[u'等?

任何幫助,將不勝感激。

+0

AREA_related'如何存儲? – Hamish

+0

你也可以向我們展示第二種情況的模板代碼。 –

+0

@ Hamish你的意思是什麼?基本上,用戶點擊複選框,然後這些值與add = Descriptions(name = name_add,areas_related = areas_related)add.save()....然後,我想在不同的視圖中顯示所有的檢查項目,沒有任何[u'等。 – sam

回答

2

這裏可能會發生什麼是您將areas_related存儲爲字符串。

所以你可能有像模特:

class Service(models.Model): 
    ... 
    areas_related = models.CharField(max_length=<length_here>) 

,然後在你做這個的觀點:

def foo_view(request, ...): 
    ... 
    service = <retrieve Service here> 
    areas_related = request.POST.getlist('areas_related') 
    service.areas_related = areas_related 
    service.save() 
    ... 

那麼到底是怎麼回事這裏是request.POST.getlist('areas_related')返回Python列表。然後,您將該值存儲到模型的字符串字段中。因此,Django試圖將給定的列表轉換爲一個字符串,然後將其存儲在數據庫中;當您轉換Python列表爲字符串,其結果是列表的字符串表示:

>>> a = [u'foo', u'foo2'] 
>>> unicode(a) 
u"[u'foo', u'foo2']" 

爲了解決這個問題,你可以做這些事情之一:

外鍵

將所有areas_related作爲單個字段存儲在模型中,而不是將它們存儲爲外鍵。我認爲這是一種更好的方式,因爲那樣你就可以進行SQL聚合,並且與下一個方法相比,它被認爲更加靈活。

# models.py 
class AreaRelated(models.Model): 
    service = models.ForeignKey('Service', related_name='areas_related') 
    areas_related = models.CharField(max_length=<length_here>) 

class Service(models.Model): 
    ... 

# views.py 
def foo_view(request, ...): 
    ... 
    service = <retrieve Service here> 
    areas_related = request.POST.getlist('areas_related') 
    for a in areas_related: 
     service.areas_related.create(areas_related=a) 
    ... 

# template 
{% for service in services %} 
    {% for area_related in service.areas_related.all() %} 
     {{ area_related }} 
    {% endfor %} 
{% endfor %} 

編碼字符串

存儲列表中,通過某種方式編碼一個字符串的areas_related模型字段,然後在檢索解碼以獲取列表。這種方法很好,因爲所有東西都存儲在一個列中的數據庫中,但是您無法對areas_related進行任何查詢,因爲它將存儲多個值的編碼字符串,而不是一個。

# models.py 
import json 
class Service(models.Model): 
    ... 
    areas_related = models.CharField(max_length=<length_here>) 

    def get_areas_related(self): 
     return json.loads(self.areas_related) 

# views.py 
import json 
def foo_view(request, ...): 
    ... 
    service = < retrieve Service here> 
    areas_related = request.POST.getlist('areas_related') 
    service.areas_related = json.dumps(areas_related) 
    service.save() 
    ... 

# template 
{% for service in services %} 
    {% for area_related in service.get_areas_related %} 
     {{ area_related }} 
    {% endfor %} 
{% endfor %} 
+0

是的,這正是我做錯了。謝謝! – sam