2016-03-07 45 views
0

有沒有辦法做一個組合過濾器來查看一個對象是否存在以及它是否存在是否有效?在django過濾器中檢查是否存在和活動狀態

試圖找出某個用戶是否存在類似的模型實例,以及類似模型是否處於活動狀態。

我用這個來改變初始css的顯示。如果用戶喜歡它,那麼它會顯示一個綠色的按鈕或其他東西來表示這一點。然後ajax更新計數器/切換css類,查看創建一個喜歡或切換現有的狀態。只是想知道是否有一個更好的方法來檢查這種情況。

電流濾波/方法:

likes = article.articlelike_set.filter(is_active=1) 
users_like = likes.filter(user=request.user) 
user_liked_article = users_like[0].is_active if users_like.exists() else False 

像類似的應用程序/條型關係:

class BaseLike(models.Model): 

    user = models.ForeignKey(User) 
    created = models.DateTimeField(auto_now_add=True) 
    is_active = models.BooleanField(default=True) 

    class Meta: 

     abstract = True 

class ArticleLike(BaseLike, models.Model): 

    article = models.ForeignKey('article.Article') 
    .... 

文章型號:

class ArticleBaseFields(models.Model): 

    created = models.DateTimeField(default=timezone.now) 
    ... 
    slug = models.SlugField(unique=1) 

    class Meta: 

     abstract = True 

class Article(ArticleBaseFields,models.Model): 

    body = models.TextField(max_length=5000) 
    publisher = models.ForeignKey('userprofiles.ArticlePublisher', related_name="publisher") 
    #Publisher is a profile with a OneToOneField to auth.models User model 
    ... 
+0

請例如提供更多的上下文字段在不同的模型上,比如'Article','Likes','Users'以及它們是如何相互關聯的。 – AKS

回答

1

既然你已經在is_active=1過濾,您不需要稍後檢查users_like[0].is_active,因爲在此t ime你只有所有喜歡的活動。

的另一種方式是讓用戶第一(理想情況下應該是1或0

user_likes = article.articlelike_set.filter(user=request.user) 

現在,首先你可以如果像該用戶是否存在或檢查所有喜歡不:

user_likes.exists() # user has liked an article 

,或者,如果活性等用於用戶存在與否:

user_likes.filter(is_active=1).exists() # user has liked an article and it is active 

在一個完全不同的說明,如果你使用related_name您的代碼會看起來更漂亮:

article = models.ForeignKey('article.Article', related_name='likes') 

# to filter on likes 
article.likes.filter(...) 
相關問題