检查 django 过滤器中的存在和活动状态

check for existence and active state in django filter

有没有办法做一个组合过滤器来查看对象是否存在以及是否存在是否处于活动状态?

正在尝试找出用户是否存在喜欢的模型实例,以及喜欢是否处于活动状态。

我正在使用它来更改初始 css 的显示。如果用户喜欢它,那么它会显示一个绿色的喜欢按钮或其他东西来表示这一点。 ajax 然后更新计数器/切换 css class,视图创建一个赞或切换现有赞的状态。只是想知道是否有更简洁的方法来检查这种情况。

当前过滤/方法:

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

由于您已经在 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(...)