2012-01-31 13 views
0

ランダムイメージをグラデーションすると、tag.rand_imgのtitle、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)) 

テンプレート(簡体字):

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

し、それらを反復処理し、追加します。

{% 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] 

するクエリセットではなく、モデルインスタンスを返しています。クエリーセットにはカスタムメソッドがありません。クエリーセット内のインスタンスにのみ存在します。

実際のモデルのインスタンスを取得するには、を[0]に置き換えます(一致する項目がない場合は、IndexErrorをキャッチする必要があります)。

1

私は最初のタグを取得したいです余分なフィールドとしての画像。それで、あなたはあなたのテンプレートで概説したような何かをすることができます。

+0

画像を余分なフィールドとして追加するにはどうすればよいですか?それは私が立ち往生しているビットです。 –

+1

'tag.rand_img = img'だけで十分だと思います。 –

+0

tag.rand_img = tagは、オブジェクトにtitle、urlなどの属性をすべて失わせます。 –

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 –

関連する問題