2012-01-31 87 views
0

對隨機圖像進行分級會導致tag.rand_img上的標題,url(etc)屬性消失,這意味着我無法顯示超過對象名稱的任何內容。從已標記庫中選擇一個隨機項目

view.py:

def locations_gallery(request): 
    queryset = Photo.objects.all() 
    tags = Tag.objects.usage_for_queryset(queryset, counts=True) 
    tags.sort(key=operator.attrgetter('count'), reverse=True) 
    for tag in tags: 
    image_tag = Tag.objects.get(name=tag) 
    tag.rand_img = TaggedItem.objects.get_union_by_model(Photo, image_tag).order_by('?')[:1] 
    ctxt['tags'] = tags 
    return render_to_response('locations_gallery.html', ctxt, RequestContext(request)) 

模板(簡化):

{% for tag in tags %} 
{{ tag.name }} 
<img src="{{ tag.rand_img.url }}"> 
{% endfor %} 

回答

2

這條線:

試試這個

tag.rand_img = TaggedItem.objects.get_union_by_model(Photo, image_tag).order_by('?')[:1] 

返回一個查詢集,而不是一個模型實例。該查詢集沒有您的自定義方法,它們只存在於該查詢集中的實例上。

[:1]替換爲[0]以獲取實際模型實例(如果沒有匹配的項目,您需要捕獲IndexError)。

1

我先拿到標籤:

tags = Tag.objects.usage_for_queryset(queryset, counts=True) 
tags.sort(key=operator.attrgetter('count'), reverse=True) 

,然後遍歷它們並添加圖像作爲額外的領域。然後,您可以按照您在模板中列出的內容進行操作。

+0

如何將圖像添加爲額外的字段?這是我堅持的一點。 – 2012-01-31 10:51:17

+1

我認爲只要做一個'tag.rand_img = img'就夠了。 – 2012-01-31 11:03:14

+0

tag.rand_img =標記會導致對象失去標題,網址等所有屬性 – 2012-01-31 11:23:03

1

你可以添加這樣的屬性,Python將允許它,但你不再工作在QuerySet。在你看來

def get_rand_img(tag): 
    return TaggedItem.objects.get_union_by_model(Photo, tag).order_by('?')[:1] 

display_tags = [(Tag.objects.get(name=tag), 
       get_rand_img(Tag.objects.get(name=tag))) for tag in tags] 
ctxt['tags'] = display_tags 

然後

{% for tag, rand_img in tags %} 
    {{ tag.name }} 
    <img src="{{ rand_img.url }}"> 
{% endfor %} 
+0

同樣的結果,我失去了屬性:S – 2012-01-31 12:29:03

相關問題