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))

テンプレート(簡略化):

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

3 に答える 3

2

この行:

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

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

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

于 2012-01-31T13:15:16.733 に答える
1

私は最初にタグを取得します:

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

次に、それらを繰り返し処理し、画像を追加フィールドとして追加します。次に、テンプレートで概説したようなことを行うことができます。

于 2012-01-31T10:45:08.450 に答える
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 %}
于 2012-01-31T12:13:15.870 に答える