2011-12-18 6 views
1

Djangoサイトフレームワークを使用して、異なるサイト間でオブジェクトを共有しています。これは、私のモデル内で多対多の関係を定義することができたのでうまくいきます。テンプレートタグ「render_comment_list」を使用してオブジェクトのコメント(ジャンゴ・コメント)を取得しているときに指定されたオブジェクトのすべてのサイトからのDjangoコメントの取得

しかし、私はその特定のサイトに投稿されたそれらのコメントを取得します。これは期待されていますが、複数のサイトで共有されているそのオブジェクトに対して投稿された他のコメントも取得したいと思います。ジャンゴ・コメントのコードを掘り下げる

、「問題」を引き起こし方法であると思わ:

def get_query_set(self, context): 
    ctype, object_pk = self.get_target_ctype_pk(context) 
    if not object_pk: 
     return self.comment_model.objects.none() 

    qs = self.comment_model.objects.filter(
     content_type = ctype, 
     object_pk = smart_unicode(object_pk), 
     site__pk  = settings.SITE_ID, 
    ) 

私の質問は以下のとおりです。

  • する最も簡単な方法だろう何テンプレートタグ 'render_comment_list'がオブジェクトのコメントだけを表示し、特定のサイトのコメントは表示しないように振る舞いを変更しますか?
  • 私は別のテンプレートタグを作成する必要があるとDjango-コメントテンプレートタグコードの&ペースト99%をコピーしていますか?

おかげ

答えて

1

あなたは、テンプレートタグのコードの99%をコピーして、過去のために持っているだけで、サブクラスRenderCommentListNode、あなたが問題を特定しget_queryset_methodを上書きしません。その後、render_comment_list関数をコピーしますが、子クラスを使用してください。

class RenderCommentListNodeAllSites(RenderCommnetListNode): 
    def get_query_set(self, context): 
     ctype, object_pk = self.get_target_ctype_pk(context) 
     if not object_pk: 
      return self.comment_model.objects.none() 

     qs = self.comment_model.objects.filter(
      content_type = ctype, 
      object_pk = smart_unicode(object_pk), 
     ) 

def render_comment_list_all_sites(parser, token): 
    return RenderCommentListNodeAllSites.handle_token(parser, token) 
register.tag(render_comment_list_all_sites) 
0

ありがとうAlasdair!私は変更を加え、それは働いています。全体のコードを書く(今では動作します!)明確にするため:

class RenderCommentListNodeAllSites(RenderCommentListNode): 
    def get_query_set(self, context): 
     ctype, object_pk = self.get_target_ctype_pk(context) 
     if not object_pk: 
      return self.comment_model.objects.none() 

     qs = self.comment_model.objects.filter(
      content_type = ctype, 
      object_pk = smart_unicode(object_pk), 
      #site__pk  = settings.SITE_ID, 
     ) 

     # The is_public and is_removed fields are implementation details of the 
     # built-in comment model's spam filtering system, so they might not 
     # be present on a custom comment model subclass. If they exist, we 
     # should filter on them. 
     field_names = [f.name for f in self.comment_model._meta.fields] 
     if 'is_public' in field_names: 
      qs = qs.filter(is_public=True) 
     if getattr(settings, 'COMMENTS_HIDE_REMOVED', True) and 'is_removed' in field_names: 
      qs = qs.filter(is_removed=False) 

     return qs 

def render_comment_list_all_sites(parser, token): 
    return RenderCommentListNodeAllSites.handle_token(parser, token) 
register.tag(render_comment_list_all_sites) 
関連する問題