基于django的微博如何设计用户model


准备基于django.contrib.auth.models进行扩展,但是对于关注和粉丝这两个field的设计一直拿不准,使用foreignkey的话只能关注一人,使用manytomanyfield的话关注的这个field既可能表示关注又可能表示粉丝完全无法区分,求高手指教该如何建立这个model,谢谢。

python web django

Yuukimi 10 years, 3 months ago

采用 @rsj217 的方案就可以实现社交网络中的关注功能,除此之外也可以采用 Activity Stream
来实现,Activity Stream使用了Django中的ContentType包,因此使用它可以实现任何对象之间的关注功能(例如:组的关注、资源的关注等),具体使用方式可以看一下上面的文档。


 @python_2_unicode_compatible
class Follow(models.Model):
    """
    Lets a user follow the activities of any specific actor
    """
    user = models.ForeignKey(user_model_label)

    content_type = models.ForeignKey(ContentType)
    object_id = models.CharField(max_length=255)
    follow_object = generic.GenericForeignKey()
    actor_only = models.BooleanField("Only follow actions where "
                                     "the object is the target.", default=True)
    started = models.DateTimeField(default=now)
    objects = FollowManager()

    class Meta:
        unique_together = ('user', 'content_type', 'object_id')

    def __str__(self):
        return '%s -> %s' % (self.user, self.follow_object)

破碎的悲剧 answered 10 years, 3 months ago

可以建一个关系表 Friendship , 然后字段 field 分别是 粉丝和关注,并且 Foreignkey User


 class Friendship(models.Model):

    from_friend = models.ForeignKey(User, related_name = 'friend_set')
    to_friend = models.ForeignKey(User, related_name = 'to_friend_set')

可以参考这个 : 社交网络中关注和粉丝的数据设计

算不上高明的方法,对于一般的需求也能解决

苦逼的阿卡琳 answered 10 years, 3 months ago

Your Answer