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+unsubscribe@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+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.
No comments:
Post a Comment