我有一个表,其中包含字段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”字段获取数据。
答案 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'}]