检查django过滤器

时间:2016-03-07 05:26:02

标签: python django django-views django-orm django-filter

有没有办法进行组合过滤器以查看对象是否存在以及是否存在它是否存在?

试图找出是否为用户存在类似的模型实例,以及是否有活动。

我用这个来改变初始css的显示。如果用户喜欢它,那么它将显示一个绿色的按钮或其他东西来表示这一点。然后ajax更新counter / toggles css类,view创建like或切换现有like的状态。只是想知道是否有更简洁的方法来检查这种情况。

当前过滤/方法:

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
喜欢/ app model中的文章模型关系:

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
    ...

1 个答案:

答案 0 :(得分:1)

由于您已经在is_active=1上进行了过滤,因此您无需稍后查看users_like[0].is_active,因为此时您只拥有所有有效的内容。

另一种方法是首先获得用户的所有喜欢(理想情况下应为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(...)