0
我有一個模型來追蹤追隨者。這與其他所有社交網站類似。Django內心加入自我。有沒有更高效的方法?
現在我的模型看起來像這樣。
class Follow(models.Model):
follower = models.ForeignKey(UserProfile, related_name='follower')
following = models.ForeignKey(UserProfile, related_name='following')
follow_date = models.DateTimeField(auto_now_add=True)
今天我去添加了一些需要相互關係的功能。人a遵循b和b遵循a。我想包括當前登錄用戶以及我使用Q.
mutual_follows_qs = Follow.objects.raw('select o.* from follow o ' + \
'inner join follow f ' + \
'on o.following_id = f.follower_id' + \
' and o.follower_id = f.following_id' + \
' where o.follower_id = %s', [str(request.user.pk)])
mutual_follows = []
for mutual_follow in mutual_follows_qs:
mutual_follows.append(mutual_follow.following.pk)
possible_users = User.objects.filter(Q(pk__in=mutual_follows) \
| Q(pk=request.user.pk)).order_by('username')
我正在執行多個查詢。呸。我正在建立一個從我的原始列表到Q(pk__in=mutual_follows)
中使用的列表。呸。我很好奇人們有什麼建議來提高這種邏輯的效率。
這裏是UserProfile
模型
class UserProfile(models.Model):
user = models.OneToOneField(User)
...
follow = models.ManyToManyField('self', blank = True,
symmetrical=False, through='Follow')
...
我一直有點困惑在我應該把我的相關名字,他們混淆道歉。我想我沒有添加UserProfile模型到我的問題,但我現在已經更新它。假裝Follow表只有兩條記錄,就會有一條說跟隨者= a,跟隨= b,另一個跟隨者= b,跟隨= a。這兩個記錄存在的事實意味着他們都相互關注。我認爲使用你的代碼會說用戶正在關注自己。我更新的帖子和評論是否有助於澄清?謝謝你的幫助。 – wilbbe01
不,它沒有說他在追隨自己......關係(追隨者/追隨者)實際上是一組對象(外鍵的反向關係,1:n關係),所以像'follower__follower = user '意味着類似的東西「,在這組跟隨記錄中存在一個對象,其中字段'follower = user'」... –
好的。疑難雜症。 'Q(Q(follower__following = user)&Q(following__follower = user))'做。至少這給了我預期的結果,其中最初只給予用戶。謝謝。 – wilbbe01