2012-01-31 86 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

相关问题