基于模型法的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
,这就成功了。