AUTH_USER_MODEL = getattr(settings, 'AUTH_USER_MODEL', 'auth.User')
class Friend(models.Model):
""" Model to represent Friendships """
to_user = models.ForeignKey(AUTH_USER_MODEL, related_name='friends')
from_user = models.ForeignKey(AUTH_USER_MODEL, related_name='_unused_friend_relation')
created = models.DateTimeField(default=timezone.now)
objects = FriendshipManager()
class Meta:
verbose_name = _('Friend')
verbose_name_plural = _('Friends')
unique_together = ('from_user', 'to_user')
def __unicode__(self):
return "User #%d is friends with #%d" % (self.to_user_id, self.from_user_id)
class FriendshipManager(models.Manager):
def unread_requests(self, user):
""" Return a list of unread friendship requests """
key = cache_key('unread_requests', user.pk)
unread_requests = cache.get(key)
if unread_requests is None:
qs = FriendshipRequest.objects.select_related(depth=1).filter(
to_user=user,
viewed__isnull=True).all()
unread_requests = list(qs)
cache.set(key, unread_requests)
return unread_requests
class Person(models.Model):
user = models.ForeignKey(User))
name = models.CharField(max_length=30, blank=True)
image = models.ImageField(upload_to='photos', blank=True)
def __unicode__(self):
return self.user.username
私はこの友情モデルを使用しています。このモデルを使用すると、ユーザー間で友達を作ることができます。上記の Profile という UserProfile モデルもあります。
以下のコマンドは、特定のユーザーのすべてのフレンドシップ リクエストを表示する方法を示しています。
>>> user = User.objects.get(pk=1)
>>> user1 = User.objects.get(pk=1)
>>> user2 = User.objects.get(pk=2)
>>> user3 = User.objects.get(pk=3)
>>> Friend.objects.add_friend(user1,user3)
<FriendshipRequest: User #1 friendship requested #3>
>>> Friend.objects.add_friend(user2,user3)
<FriendshipRequest: User #2 friendship requested #3>
>>> requests = Friend.objects.unread_requests(user=user3)
>>> requests
[<FriendshipRequest: User #1 friendship requested #3>, <FriendshipRequest: User
#2 friendship requested #3>]
>>> requests[0].to_user
<User: hello>
特定のユーザーのすべての友情リクエストを画像付きで表示しようとしていますが、
リクエストがタプルにあるため、現時点ではできません(以下は例です)。
特定のユーザーのフレンドシップを要求したすべてのユーザーを取得できるようにしたい
次に、それらのユーザーを使用して、 Person を参照するユーザーの UserProfile モデルを取得し、テンプレートに画像を表示できるようにします
最も単純な形で
フレンドシップをリクエストしたすべてのユーザーを取得するにはどうすればよいですか (以下の例では、1 人のユーザー名を表示できます)
>>> requests = Friend.objects.unread_requests(user=user3)
>>> requests
[<FriendshipRequest: User #1 friendship requested #3>, <FriendshipRequest: User
#2 friendship requested #3>]
>>> requests[0].to_user
UserProfile ( Person ) を収集します。
Person.objects.filter ( ? )