查询在一段时间内创建的对象



我正在编写一个查询,该查询尝试获取用户列表,如果它们是在 30 天(1 个月(内创建的,则返回它们。

这是我尝试过的,

models.py

class Showcase(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.DO_NOTHING, related_name="Showcases")
content = models.TextField(null=True)
created_on = models.DateTimeField(auto_now_add=True)
slug = models.SlugField(max_length=255, unique=True)

serializers.py

class ShowcaseSerializer(serializers.ModelSerializer):
user = serializers.SlugRelatedField(read_only=True, slug_field='slug')
created_on = serializers.SerializerMethodField(read_only=True)
slug = serializers.SlugField(read_only=True)
class Meta:
model = Showcase
exclude = ['id']
def get_created_on(self, instance):
return instance.created_on.strftime("%d %B %Y ; %H:%M:%S %Z")

views.py

class MostLikedMonthShowcasesView(generics.ListAPIView):
'''
Most liked showcases created within the past month
'''
serializer_class = ShowcaseSerializer
permission_classes = [AllowAny]
def get_queryset(self):
last_30_days = datetime.datetime.today() - datetime.timedelta(30)
return Showcase.objects.filter(created_on__lte=datetime.datetime.today(), created_on__gt=datetime.datetime.today()-datetime.timedelta(days=30)).values('created_on')

当我运行上面的代码时,我得到'dict' object has no attribute 'created_on'

抛出该错误的代码不是数据库部分,我敢打赌是这样的:

def get_created_on(self, instance):
return instance.created_on.strftime("%d %B %Y ; %H:%M:%S %Z")

显示此方法的调用方如何

此外,使用范围函数:

https://docs.djangoproject.com/en/3.0/ref/models/querysets/#range

values(( 方法返回一个包含字典的 QuerySet。因此,基本查询集将是

def get_queryset(self):
last_30_days = datetime.datetime.today() - datetime.timedelta(30)
return Showcase.objects.filter(created_on__range=[last_30_days,datetime.datetime.today())

最新更新