2013-10-27 67 views
-1

我有一個像波紋管的模型。django檢查模型表是否有對象

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服務器,它將立即成爲真正的問題是什麼?

回答

1

從文檔看來,.exists()更合適更快。

可以檢查作爲

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

對於第二個問題,這可能是Django的查詢集緩存問題。是否有一些觀點?

+0

是的,它在一些視圖 – mike

相關問題