如何解决视图中用于模型实例过滤的代码重复问题

How to resolve code duplication in View for model instances filtering

我试图弄清楚如何解决可能是一个非常简单的问题,但我想以一种适当且与 Django 一致的方式来解决。

假设我们有一个示例模型:

class ExmapleModel(Model):
    vote_up = models.IntegerField(default=0)
    vote_down = models.IntegerField(default=0)

    def get_voting_count(self):
        return self.vote_up - self.vote_down

好的,现在我想在 ExmapleModel 的一个模板上创建单独的视图,例如投票计数高于 500 和所有实例。当然,我可以创建类似的东西:

class ModelListView(ListView):
    model = ExmapleModel
    template_name = 'ExmapleModel_list.html'

第二个:

class ModelListView(ListView):
    model = ExmapleModel
    template_name = 'ExmapleModel_list.html'

    queryset = ExmapleModel.objects.filter(get_voting_count()>300)

假设以上所有,我想避免为上面的例子重复很多代码,我不知道如何使用 get_voting_count() 方法来过滤和组合所有这些东西工作包。如果您对如何组合它有任何想法,请帮助我。

另一方面,我应该在模型中使用这个逻辑吗?

已解决:

让我夜不能寐的事情比我想象的要简单得多。所以基本上为了解决计算字段的过滤问题,我为我的模型创建了一个模型管理器,在管理器中,我在投票变量中添加了一个过滤器,如下所示:

def get_hot_deal(self, days, hot_result):
    voting = F('vote_up') - F('vote_down')
    hot_deals = Deal.objects.annotate(rate=voting).filter(
        rate__gte=hot_result,
        created_at__gte=datetime.date.today() - datetime.timedelta(days)
    )  
    return hot_deals