Django 使用日期选择器动态按月搜索项目
我刚开始学习Django,现在正在用它开发一个项目。我的项目和图片有关。我想在项目中添加一个日期选择器,这样用户就可以按月份搜索他们上传的图片。
举个例子,如果用户从日期选择器中选择某年的一月份,想查看他上传的图片,那么系统就会显示该年一月份上传的所有图片。现在我想知道如何在Django中实现这个功能。为了方便理解,我提供了与上传图片相关的模型、表单和视图。
这是models.py的内容:
class Photo(models.Model):
name = models.CharField(max_length = 100)
photo = models.ImageField(upload_to = 'photos', blank=False,null=True)
approved = models.BooleanField(default = False)
approved_by = models.CharField(max_length = 100)
user = models.ForeignKey(User)
uploaded_time = models.DateTimeField('date downloaded',auto_now=True)
这是views.py的内容:
def UserImageUpload(request):
if request.method == 'POST':
form = DocumentForm(request.POST,request.FILES)
if form.is_valid():
messages.add_message(request, messages.SUCCESS, 'Your Image upload is waiting for Admin approval')
newdoc = Photo(photo = request.FILES['photo'],user = request.user,name = request.POST['name'],uploaded_time=datetime.datetime.now())
newdoc.save()
else:
messages.add_message(request, messages.ERROR, 'Something is Missing!')
else:
form = DocumentForm()
uploaded_image = Photo.objects.all()
return render_to_response('myprofile/user_image_upload.html',{'uploaded_image':uploaded_image,'form':form},context_instance = RequestContext(request))
这是form.py的内容:
class DocumentForm(forms.Form):
name = forms.CharField(label='Name Of Your Image',widget=forms.TextInput(attrs={'class' : 'form-control',}))
photo = forms.ImageField(
label='Select a file',)
你可以使用任何示例模板来使用日期选择器并显示搜索结果。
1 个回答
2
这里有一个例子。
这是一个用来验证日期输入的表单:
class PickDateForm(forms.Form):
date = forms.DateField(widget=forms.DateInput(attrs={'class': 'any_custom_class_name'}))
视图:
def query_by_month(request):
if request.method == 'POST':
form = PickDateForm(request.POST)
if form.is_valid():
selected_date= form.cleaned_data['date'] # 'selected_date' is a datetime.date object
photos = Photo.objects.filter(uploaded_time__year=selected_date.year,
uploaded_time__month=selected_date.month)
return HttpResponse('Photos: ' + repr(photos))
else:
return HttpResponse('Invalid form')
else:
form = PickDateForm()
return render(request, 'pickdate.html', {'form': form})
HTML部分(使用了jQuery日期选择器):
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.11.0/themes/smoothness/jquery-ui.css">
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script src="http://code.jquery.com/ui/1.11.0/jquery-ui.js"></script>
<script>
$(function() {
$( ".any_custom_class_name" ).datepicker();
});
</script>
</head>
<body>
<form action="/pick_date/" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit" />
</form>
</body>
</html>