0

私はdjango-relationshipsを使用して、ユーザーが相互にフォローできるようにしています。ボブがジョーに続く場合。Bob は Joe のすべての写真を見ることができます。ただし、ボブがジョンをブロックすると、ジョンはボブの写真ではなくなります。

私の問題は、ブロックされたユーザーからのコンテンツを制限する方法がわからないことです。例を見てきましたが、まだ解決策が見つからないようです。

フォトグラファーがユーザーの FK であると仮定する

これが私の FollowPhoto リソースです (このリソースは、ユーザーがフォローしているユーザーに属するすべての写真を返します)。

FollowingPhoto(ModelResource):
     photographer = fields.ForeignKey(PhotographerResource, 'photographer', full=True)
     class Meta:
          queryset = Photo.objects.all().order_by('-postTime')
          resource_name = 'following'
          fields = ['id', 'title', 'url', 'likes','postTime','photographer', 'location_id', 'location_name']
          authentication = BasicAuthentication()
          authorization = DjangoAuthorization()
          serializer = Serializer(formats=['json'])
          include_resource_uri = False
          filtering = {
                 'postTime': ALL,
                 'photographer' : ALL_WITH_RELATIONS,


         }

     def get_object_list(self, request):
             return super(FollowingPhoto, self).get_object_list(request).filter(photographer__user__in = request.user.relationships.following())

get_object_list でお気づきかもしれませんが、フォローしているユーザーのすべてのコンテンツが返されます。ブロックされているユーザーがこのリストに表示されないようにするにはどうすればよいですか?

Django-relationships アプリは、postgresql で2 つのテーブルを生成します。以下のテーブルは relationship_relationships テーブルです。

    id       from_user    to_user_id   status_id            created
[PK] serial   integer      integer                         timestamp
    6            1            5           1         2012-10-05 20:10:29.848667+00"
    7            1            3           1         2012-10-05 20:11:23.319961+00"

もう 1 つのテーブルは relationship_relationshipstatus テーブルです。

    id          name          verb         from_slug        login_required   private
[PK] serial   character     character   character varying      boolean       boolean
    1         Following      follow         friends             FALSE         FALSE
    2         Blocking        block         !                   TRUE          TRUE

以下に、Django-relationships models.py へのリンクを追加して、さらに明確にすることができます。

models.py

4

2 に答える 2

2

.exclude句が必要なだけのように見えます-次のようなものです:

def get_object_list(self, request):
     return super(FollowingPhoto, self).get_object_list(request).filter(photographer__user__in = request.user.relationships.following()).exclude(photographer__user__in=request.user.relationships.blocking())

これにより、Bob が John をブロックしている場合、Bob は John の写真を見ることができなくなります。Bob が John をフォローしている場合、Bob は John の写真しか表示しないため、Bob が John をフォローしてブロックしている場合を除き、何もしません。これは私には奇妙に思えます。もしそうなら:

def get_object_list(self, request):
    return super(FollowingPhoto, self).get_object_list(request).filter(photographer__user__in = request.user.relationships.following()).exclude(photographer__user__in=request.user.relationships.blockers())
于 2013-05-10T18:00:13.113 に答える