Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于模型法的Django滤波器_Django - Fatal编程技术网

基于模型法的Django滤波器

基于模型法的Django滤波器,django,Django,我有一个模型,定义如下: class Item(models.Model): name = models.CharField(max_length=200, null=True, default='', blank=True) creation_date = models.DateTimeField('date created', default=timezone.now()) def was_published_today(self): today =

我有一个模型,定义如下:

class Item(models.Model):
    name = models.CharField(max_length=200, null=True, default='', blank=True)
    creation_date = models.DateTimeField('date created', default=timezone.now())

    def was_published_today(self):
        today = timezone.now() - datetime.timedelta(days=1)
        return self.creation_date >= today
items = Item.objects.filter(was_published_today=True)
我想筛选一组如下项目:

class Item(models.Model):
    name = models.CharField(max_length=200, null=True, default='', blank=True)
    creation_date = models.DateTimeField('date created', default=timezone.now())

    def was_published_today(self):
        today = timezone.now() - datetime.timedelta(days=1)
        return self.creation_date >= today
items = Item.objects.filter(was_published_today=True)
但我遇到了一个
FieldError
,这很有意义,因为过滤器似乎不是用来根据方法过滤一组对象的。详细错误:

Cannot resolve keyword 'was_published_today' into field. Choices are : creation_date, name
正确的方法是什么?我知道我可以将
创建日期
与今天的日期进行比较,但这就是
今天发布的日期
所做的,我想保持它干燥。

我认为这是一种正确的方法。文档中的示例:

from datetime import timedelta
Entry.objects.filter(mod_date__gt=F('pub_date') + timedelta(days=3))
我认为这是一个正确的方法。文档中的示例:

from datetime import timedelta
Entry.objects.filter(mod_date__gt=F('pub_date') + timedelta(days=3))
我认为这是一个正确的方法。文档中的示例:

from datetime import timedelta
Entry.objects.filter(mod_date__gt=F('pub_date') + timedelta(days=3))
我认为这是一个正确的方法。文档中的示例:

from datetime import timedelta
Entry.objects.filter(mod_date__gt=F('pub_date') + timedelta(days=3))
在这里你可以使用django

自定义管理器:

class GetPublishedToday(models.Manager):
      def get_query_set(self):
        return super(GetPublishedToday, self).get_query_set().filter(creation_date= timezone.now() - datetime.timedelta(days=1))
在模型中:

class Item(models.Model):
    name = models.CharField(max_length=200, null=True, default='', blank=True)
    creation_date = models.DateTimeField('date created', default=timezone.now())
    was_published_today= GetPublishedToday()
在以下观点中:

items = Item.was_published_today.all()  # or .filter(name= "foobar")
“'PS:这是一个未经测试的代码。”

这里您可以使用django

自定义管理器:

class GetPublishedToday(models.Manager):
      def get_query_set(self):
        return super(GetPublishedToday, self).get_query_set().filter(creation_date= timezone.now() - datetime.timedelta(days=1))
在模型中:

class Item(models.Model):
    name = models.CharField(max_length=200, null=True, default='', blank=True)
    creation_date = models.DateTimeField('date created', default=timezone.now())
    was_published_today= GetPublishedToday()
在以下观点中:

items = Item.was_published_today.all()  # or .filter(name= "foobar")
“'PS:这是一个未经测试的代码。”

这里您可以使用django

自定义管理器:

class GetPublishedToday(models.Manager):
      def get_query_set(self):
        return super(GetPublishedToday, self).get_query_set().filter(creation_date= timezone.now() - datetime.timedelta(days=1))
在模型中:

class Item(models.Model):
    name = models.CharField(max_length=200, null=True, default='', blank=True)
    creation_date = models.DateTimeField('date created', default=timezone.now())
    was_published_today= GetPublishedToday()
在以下观点中:

items = Item.was_published_today.all()  # or .filter(name= "foobar")
“'PS:这是一个未经测试的代码。”

这里您可以使用django

自定义管理器:

class GetPublishedToday(models.Manager):
      def get_query_set(self):
        return super(GetPublishedToday, self).get_query_set().filter(creation_date= timezone.now() - datetime.timedelta(days=1))
在模型中:

class Item(models.Model):
    name = models.CharField(max_length=200, null=True, default='', blank=True)
    creation_date = models.DateTimeField('date created', default=timezone.now())
    was_published_today= GetPublishedToday()
在以下观点中:

items = Item.was_published_today.all()  # or .filter(name= "foobar")

“PS:这是一个未经测试的代码。”

我不这么认为。正如文档中所述,
F expressions
引用的是模型字段的值,而不是它的某个方法()。您无论如何都不能在筛选器中使用模型的某个方法,因为queryset必须构建sql查询。我不这么认为。正如文档中所述,
F expressions
引用的是模型字段的值,而不是它的某个方法()。您无论如何都不能在筛选器中使用模型的某个方法,因为queryset必须构建sql查询。我不这么认为。正如文档中所述,
F expressions
引用的是模型字段的值,而不是它的某个方法()。您无论如何都不能在筛选器中使用模型的某个方法,因为queryset必须构建sql查询。我不这么认为。如文档中所述,
F expressions
引用的是模型字段的值,而不是它的某个方法()。您无论如何都不能在筛选器中使用模型的某个方法,因为queryset必须生成sql查询。谢谢!除了管理器部分,我使用了
creation\u date\u gte
而不是
creation\u date
。谢谢!除了管理器部分,我使用了
creation\u date\u gte
而不是
creation\u date
。谢谢!除了管理器部分,我使用了
creation\u date\u gte
而不是
creation\u date
。谢谢!除了在管理器部分,我使用了
creation\u date\u gte
,而不是
creation\u date
,这就成功了。