-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 ,我A in B.followers.all()用来检查 A 是否跟随 B 。这样做好不好,如果 B.followers 有 10000000 个对象,这是一个好方法吗?

另一个问题是,如果我确实在我的 (android) 应用程序中关注用户,A in B.followers.all()则将返回 false 一段时间并返回 true 。如果我重新启动 django 服务器,它会立即变为 true。有什么问题?

4

1 回答 1

1

从文档来看,它似乎.exists()更合适、更快。

您可以检查为

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

对于第二个问题,可能是 django 查询集缓存问题。在某些方面是这样吗?

于 2013-10-27T07:59:16.083 回答