我正在玩Django / python中的人际关系,我想知道你们如何在用户和他的粉丝以及他跟随的用户的追随者之间建立关系。
愿意阅读你的意见......
答案 0 :(得分:23)
首先,您应该了解如何store additional information about users。它需要另一个与一个用户关系的模型,即“配置文件”模型。
然后,您可以使用M2M字段,假设您使用django-annoying,您可以定义您的用户个人资料模型:
from django.db import models
from annoying.fields import AutoOneToOneField
class UserProfile(models.Model):
user = AutoOneToOneField('auth.user')
follows = models.ManyToManyField('UserProfile', related_name='followed_by')
def __unicode__(self):
return self.user.username
并按原样使用:
In [1]: tim, c = User.objects.get_or_create(username='tim')
In [2]: chris, c = User.objects.get_or_create(username='chris')
In [3]: tim.userprofile.follows.add(chris.userprofile) # chris follows tim
In [4]: tim.userprofile.follows.all() # list of userprofiles of users that tim follows
Out[4]: [<UserProfile: chris>]
In [5]: chris.userprofile.followed_by.all() # list of userprofiles of users that follow chris
Out[5]: [<UserProfile: tim>]
另请注意,您可以检查/重复使用django-subscription,django-actstream,django-social等应用(可能更难使用)......
您可能需要查看notifications和activities的django软件包,因为它们都需要一些关注/订阅数据库设计。
答案 1 :(得分:3)
我就是这样做的:
class Tweeter(models.Model):
user = models.ManyToManyField('self', symmetrical=False, through='Relationship')
class Relationship(models.Model):
who = models.ForeignKey(Tweeter, related_name="who")
whom = models.ForeignKey(Tweeter, related_name="whom")
在shell中,
在[1]中:t = Tweeter()
在[2]中:t.save()
在[3]中:f = Tweeter()
在[4]中:f.save()
在[5]中:r =关系()
在[6]中:r.who = t
在[7]中:r.whom = f
在[8]中:r.save()
在[18]中:Relationship.objects.all()[0] .who.id
出[18]:1L在[19]中:Relationship.objects.all()[0] .whom.id
出[19]:2L
答案 2 :(得分:1)
编辑:正如评论者所说,使用ManyToManyField更有意义。用户可以拥有0-x用户关注者,用户可以关注0-x用户。
https://docs.djangoproject.com/en/1.3/ref/models/fields/#manytomanyfield
没有进入代码,没有更多的话要说。