首页 > 解决方案 > 查询某个时间段内创建的对象

问题描述

我正在编写一个查询,它试图获取用户列表并在 30 天(1 个月)内创建它们时返回它们。

这是我尝试过的,

模型.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)

序列化程序.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")

视图.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'

标签: pythondjangodjango-rest-framework

解决方案


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

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


推荐阅读