I think I've resolved some of my problems:

I was wondering how to list friend request but now I think I have to
use Django-Notifications to pick up the signals, would this be right?


complete models:

class FriendshipRequest(models.Model):
    from_user = models.ForeignKey(User,
related_name="invitations_from")
    to_user = models.ForeignKey(User, related_name="invitations_to")
    message = models.CharField(max_length=200, blank=True)
    created = models.DateTimeField(default=datetime.datetime.now,
                                   editable=False)
    accepted = models.BooleanField(default=False)

    class Meta:
        verbose_name = _(u'friendship request')
        verbose_name_plural = _(u'friendship requests')
        unique_together = (('to_user', 'from_user'),)

    def __unicode__(self):
        return _(u'%(from_user)s wants to be friends with %
(to_user)s') % \
                    {'from_user': unicode(self.from_user),
                     'to_user': unicode(self.to_user)}

    def accept(self):
        Friendship.objects.befriend(self.from_user, self.to_user)
        self.accepted = True
        self.save()
        signals.friendship_accepted.send(sender=self)

    def decline(self):
        signals.friendship_declined.send(sender=self, cancelled=False)
        self.delete()

    def cancel(self):
        signals.friendship_declined.send(sender=self, cancelled=True)
        self.delete()


class FriendshipManager(models.Manager):
    def friends_of(self, user, shuffle=False):
        qs = User.objects.filter(friendship__friends__user=user)
        if shuffle:
            qs = qs.order_by('?')
        return qs

    def are_friends(self, user1, user2):
        return bool(Friendship.objects.get(user=user1).friends.filter(
 
user=user2).count())

    def befriend(self, user1, user2):
        Friendship.objects.get(user=user1).friends.add(
 
Friendship.objects.get(user=user2))

    def unfriend(self, user1, user2):
        Friendship.objects.get(user=user1).friends.remove(
 
Friendship.objects.get(user=user2))


class Friendship(models.Model):
    user = models.OneToOneField(User, related_name='friendship')
    friends = models.ManyToManyField('self', symmetrical=True)

    objects = FriendshipManager()

    class Meta:
        verbose_name = _(u'friendship')
        verbose_name_plural = _(u'friendships')

    def __unicode__(self):
        return _(u'%(user)s\'s friends') % {'user':
unicode(self.user)}

    def friend_count(self):
        return self.friends.count()
    friend_count.short_description = _(u'Friends count')

    def friend_summary(self, count=7):
        friend_list = self.friends.all().select_related(depth=1)
[:count]
        return u'[%s%s]' % (u', '.join(unicode(f.user) for f in
friend_list),
                            u', ...' if self.friend_count() > count
else u'')
    friend_summary.short_description = _(u'Summary of friends')


class UserBlocks(models.Model):
    user = models.OneToOneField(User, related_name='user_blocks')
    blocks = models.ManyToManyField(User,
related_name='blocked_by_set')

    class Meta:
        verbose_name = verbose_name_plural = _(u'user blocks')

    def __unicode__(self):
        return _(u'Users blocked by %(user)s') % {'user':
unicode(self.user)}

    def block_count(self):
        return self.blocks.count()
    block_count.short_description = _(u'Blocks count')

    def block_summary(self, count=7):
        block_list = self.blocks.all()[:count]
        return u'[%s%s]' % (u', '.join(unicode(user) for user in
block_list),
                            u', ...' if self.block_count() > count
else u'')
    block_summary.short_description = _(u'Summary of blocks')


def create_friendship_instance(sender, instance, created, raw,
**kwargs):
    if created and not raw:
        Friendship.objects.create(user=instance)
models.signals.post_save.connect(create_friendship_instance,
                                 sender=User,
                                 dispatch_uid='friends.models.create_'
\
                                              'friendship_instance')


def create_userblocks_instance(sender, instance, created, raw,
**kwargs):
    if created and not raw:
        UserBlocks.objects.create(user=instance)
models.signals.post_save.connect(create_userblocks_instance,
                                 sender=User,
                                 dispatch_uid='friends.models.create_'
\
                                              'userblocks_instance')


On Mar 28, 6:57 pm, Joel Goldstick <joel.goldst...@gmail.com> wrote:
> On Mon, Mar 28, 2011 at 12:14 PM, mike171562 
> <support.desk....@gmail.com>wrote:
>
>
>
> > Maybe you could use the ifequal tag in your template, not sure what
> > your trying to do , but in your view you could do a friend =
> > Friends.objects.all() and in your template,
>
> > {% ifequal friend.isfriend True %}
> > do something here
> > {%endifequal%}
>
> > {% ifequal friend.is_invited %}
> > something else
> > {%endifequal%}
>
> > On Mar 27, 7:32 pm, justin jools <devhe...@gmail.com> wrote:
> > > need some help setting up templates for friends list:
>
> > > how do I iterate a list of invited friends and are friends? I have
> > > tried:
>
> > >   {% for friends in Friendship.objects.are_friends %}
>
> > >          <li>target_user: {{ friends.target_user}}</li>
> > >          <li>current_user:{{ friends.current_user}}</li>
> > >          <li>are_friends: {{ friends.are_friends}}</li>
> > >          <li>is_invited: {{ friends.is_invited}}</li>
>
> > >   {% endfor %}
>
> > > gives me nothing but:
>
> > >     <li>{{ is_invited }}</li>
> > >     <li>{{ are_friends }}</li>
> > >     <li>{{ target_user }}</li>
> > >     <li>{{ current_user }}</li>
>
> > > output:
>
> > > false
> > > false
> > > name
> > > name
>
> > > I have been trying to figure this out for months. Please help.
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "Django users" group.
> > To post to this group, send email to django-users@googlegroups.com.
> > To unsubscribe from this group, send email to
> > django-users+unsubscr...@googlegroups.com.
> > For more options, visit this group at
> >http://groups.google.com/group/django-users?hl=en.
>
> Can you show us the code that produces these values?
>
> --
> Joel Goldstick

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to