私はDjango/pythonの関係で遊んでいますが、ユーザーとそのフォロワー、および彼がフォローしているユーザーのフォロワーとの間にどのように関係を作成するのでしょうか。
あなたの意見を読みたいです...
私はDjango/pythonの関係で遊んでいますが、ユーザーとそのフォロワー、および彼がフォローしているユーザーのフォロワーとの間にどのように関係を作成するのでしょうか。
あなたの意見を読みたいです...
まず、ユーザーに関する追加情報を保存する方法を理解する必要があります。1人のユーザーと関係のある別のモデルである「プロファイル」モデルが必要です。
次に、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(おそらく使いにくい)などのアプリをチェック/再利用できることに注意してください...
通知とアクティビティのdjangoパッケージを確認することをお勧めします。これらはすべて、フォロー/サブスクリプションデータベースの設計を必要とするためです。
これは私がそれをする方法です:
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")
シェルでは、
[1]の場合:t = Tweeter()
[2]の場合:t.save()
[3]の場合:f = Tweeter()
[4]の場合:f.save()
[5]の場合:r = Relationship()
[6]の場合:r.who = t
[7]の場合:r.whom = f
[8]の場合:r.save()
[18]の場合:Relationship.objects.all()[0] .who.id
Out [18]:1LIn [19]:Relationship.objects.all()[0] .whom.id
Out [19]:2L
編集:コメント投稿者が示唆しているように、ManyToManyFieldを使用する方が理にかなっています。ユーザーは0〜x人のユーザーフォロワーを持つことができ、ユーザーは0〜x人のユーザーをフォローできます。
https://docs.djangoproject.com/en/1.3/ref/models/fields/#manytomanyfield
コードに入る必要はありませんが、これ以上言うことはありません。