・カスタムフィルタでデータを取得し同じテンプレートの中で利用したい場合
モデル定義
以下のモデルが定義されているとする
(UserBlogが中間モデルだが、あえてManyToManyを使わないケース)
# models.py from django.db import models # Blogモデル class Blog(models.Model): title = models.CharField(max_length=200) url = models.URLField() # Userモデル # django.contrib.auth.models.User # UserBlog class UserBlog(models.Model): user_id = models.CharField(max_length=20) blog_id = models.CharField(max_length=20)
カスタムフィルタを定義
# appname/templatetags/custom_filter_package.py from django.template.defaultfilters import register @register.filter def get_blog_by_id(id): try: obj = Blog.objects.get(pk=id) return obj except Blog.DoesNotExists: pass
ビューでUserBlogを取得
# views.py from django.template import RequestContext def any_view(request): user = request.user user_blog_list = UserBlog.objects.filter(user_id=user.id) return render_to_response('blog/list.html', dict(user_blog_list=user_blog_list), RequestContext(request))
テンプレートで利用
{% comment %} blog/list.html {% endcomment%} {% load custom_filter_package %} {% for blog in user_blog_list %} {% with blog.blog_id|get_blog_by_id as blog_obj %} UserBlogのblog_idを元にカスタムフィルタでBlogのオブジェクトを取得 {{ blog_obj.name }} {{ blog_obj.url }} {% endwith %} {% endfor %}
・モデル設計で対応できない場合に利用すると良いか?
(ログテーブルやタイムライン等、複数のモデルにリレーションをはれないケース)
・QuerySet(user_blog_list)に対して各要素にblogオブジェクトがセットできるなら良いのだが、
基本的にはセットできなさそう?