-1

私は怒鳴るようなモデルを持っています。

class User(BaseModel,DjangoUser):
    uuid = models.CharField(max_length=100, blank=True)
    realname = models.CharField(max_length=100, blank=True)
    followers = models.ManyToManyField('self', through='FollowRelationship', symmetrical=False, related_name='followed_by')

    def follow(self, person):
        relationship, created = FollowRelationship.objects.get_or_create(from_person=self,to_person=person)
        return created

   def unfollow(self, person):
        fs = FollowRelationship.objects.filter(from_person=self,to_person=person)
        if fs is not None:
            fs.delete()
            return True
        return False

class FollowRelationship(models.Model):
    from_person = models.ForeignKey(User, related_name='from_user')
    to_person = models.ForeignKey(User, related_name='to_user')
    follow_time =  models.DateTimeField(default=datetime.datetime.now)

A と B の 2 つの用途があるA in B.followers.all()場合、A が B に従っているかどうかを確認するために使用します。B.followers が 10000000 個のオブジェクトを持っている場合、これは良い方法ですか?

もう1つの質問は、(Android)アプリケーションでユーザーをフォローすると、しばらくのA in B.followers.all()間 false を返し、 true を返すということです。django サーバーを再起動すると、すぐに true になります。何が問題なのですか?

4

1 に答える 1

1

ドキュメントから.exists()は、より適切で高速なようです。

として確認できます。

if B.followers.filter(from_person=A).exists():

2 番目の質問については、django クエリセットのキャッシュの問題である可能性があります。それはある見方ですか?

于 2013-10-27T07:59:16.083 に答える