在django中搜索查询结果

时间:2014-06-12 03:58:28

标签: django search filter

这是我的模特

class News(models.Model):
    title = models.CharField(max_length=500)
    published_date = models.CharField(max_length=100)
    description = models.TextField()
    details = models.TextField()
    status = models.BooleanField(default=False)
    crawler = models.ForeignKey('Crawler')
    category = models.ForeignKey('Category')

新闻的观点是

class DisplayNewsView(TemplateView):

template_name = "news_listing.html"
#paginate_by = 10


def get_context_data(self, **kwargs):

    context = super(DisplayNewsView, self).get_context_data(**kwargs)


    categories_list = Category.objects.all().filter(created_by=self.request.user)

    context['news_list'] = []
    for categories in categories_list:
        print(categories)
        for crawler in categories.crawlers.get_queryset():  
            #print(categories)
            print(crawler)          
            crawler_list = News.objects.filter(
                    Q(category=categories), 
                    Q(crawler=crawler) | Q(crawler=crawler))
            #print(crawler_list)
        context['news_list'].append(crawler_list)
    return context

我已在模板中显示新闻。 我想根据时间搜索新闻。我的意思是" date"到"约会"根据新闻模型中公布的日期。

我的分类模型是

class Category(models.Model):

    category = models.CharField(max_length=50)
    identifier = models.CharField(max_length=50, unique=True)
    level_1_words = models.TextField()
    level_2_words = models.TextField()
    created_by = models.ForeignKey(User,null=True)
    crawlers = models.ManyToManyField('Crawler',related_name='crawler_name')

    class Meta:
        verbose_name_plural = "Categories"

    def __unicode__(self):  # Python 3: def __str__(self):
        return self.category

任何人都可以根据发布日期帮助搜索新闻。 我希望它能像来自" date"到"约会"提交。 当用户点击提交按钮时,我希望过滤新闻..

如果有人告诉我如何在csv中下载搜索到的新闻,那将会很有帮助。提前谢谢

1 个答案:

答案 0 :(得分:1)

首先需要将日期字段设为DateField而不是CharField

这是在django

中查询日期范围的方法
News.objects.filter(pub_date__lte=datetime(2014, 5, 30), pub_date__gte=datetime(2014, 1, 30))

另一个例子是

News.objects.filter(pub_date__lte=datetime(2014, 5, 30), pub_date__gte=datetime(2014, 1, 30)).exclude(datetime.date.today())

有关django查询的更多信息,请查看文档@ Making queries in Django