如何从django python的queryset对象中的datetimefield获取月份和年份(2020年1月)?

时间:2020-07-22 05:20:27

标签: python python-3.x django django-views django-queryset

我有一个表,其中包含字段ID,Img,UploadDate和许多其他字段。

models.py的外观

class ImgDetails(models.Model):
    Img = models.ImageField(upload_to='media')
    Category = models.ForeignKey(CategoryList, default=1, on_delete=models.SET_DEFAULT, null=False)
    keywords = models.CharField(max_length=255)
    User = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    Valid = models.BooleanField(default=False)
    UploadDate = models.DateTimeField(auto_now_add=True)

views.py中,我想获取id,Img和UploadDate,但是在UploadDate字段(其类型为datetimefield)中,我只想获取月份和年份,该如何获取。

我尝试过:

collectMonthYear = ImgDetails.objects.filter(User_id=user.id,Valid=True).annotate(Date=('UploadDate').strftime("%m-%Y")).values('id','Img','Date')

此引发错误:'str' object has no attribute 'strftime'

有人可以帮我吗?如何使用仅包含月份和年份的“ UploadDate”字段获取数据。

4 个答案:

答案 0 :(得分:0)

如果要继续使用相同的逻辑,则可以使用date()函数将str更改为日期。

答案 1 :(得分:0)

您可以选中this answer来完成它。但是,您可以从from bs4 import BeautifulSoup 获得结果后进行格式化,如下所示:

queryset

您要遵循的哪种方式取决于您的用例。

答案 2 :(得分:0)

您可以使用django内置的数据库功能。

from django.db.models.functions import ExtractMonth, ExtractYear

ImgDetails.objects.filter(User_id=user.id,Valid=True).annotate(month=ExtractMonth('UploadDate'),year=ExtractYear('UploadDate'))

关注此link,以获取更多详细信息。

答案 3 :(得分:0)

感谢大家的帮助。

我这样做是为了实现它-我首先在queryset中获取了值

queryset = ImgDetails.objects.filter(User_id=user.id,Valid=True).annotate(month=ExtractMonth('UploadDate'),year=ExtractYear('UploadDate'))

然后通过使用单个键将月份和年份连接起来,将其转换为字典列表

queryset_value = []
print(queryset)

for result in queryset:
    queryset_value.append({'id': result.id, 'Img': result.Img.url, 'UploadDate' : str(result.month)+"-"+str(result.year)})

print(queryset_value)

输出:

[{'id': 24, 'Img': '/media/1-cover_bg_2.jpg', 'UploadDate': '7-2020'}, {'id': 26, 'Img': '/media/1-person_woman_1.jpg', 'UploadDate': '7-2020'}, {'id': 27, 'Img': '/
media/1-person_woman_3.jpg', 'UploadDate': '7-2020'}, {'id': 29, 'Img': '/media/1-person_man_2.jpg', 'UploadDate': '7-2020'}, {'id': 30, 'Img': '/media/1-person_man_
3.jpg', 'UploadDate': '7-2020'}, {'id': 31, 'Img': '/media/1-person_woman_2.jpg', 'UploadDate': '7-2020'}]