【发布时间】:2018-11-10 21:47:56
【问题描述】:
我想让用户从列表中选择一个 courseName 并显示该目录下的所有文件,我该如何实现?我正在努力寻找一种方法来显示特定课程的所有文件。 这是我到目前为止所做的:
views.py
def showDocuments(request):
if request.POST:
if Document.objects.filter(courses__exact=request.POST["course"]).exists():
print(request.POST["course"])
else:
print("there is no files for this course yet!")
documents = Document.objects.all()
courses = Course.objects.all()
context = {
"documents" : documents ,
"courses" : courses,
}
return render(request , 'dashboard.html' , context )
models.py
class Document(models.Model):
#to do : enum class !
DB = "data structure"
SF = "software enginering"
DS = "discrete structure "
WD = "web dev"
OPTIONS = "options"
courseChoices = (
(DB , "data structure"),
(SF , "software enginering "),
(DS , "discrete structure"),
(WD , "web dev"),
(OPTIONS , "options"),
)
courses = models.CharField(max_length=50, choices=courseChoices, default=OPTIONS)
description = models.TextField(help_text="A little description can be very helpful for others!")
document = models.FileField(upload_to=content_file_name)
uploaded_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return "{}".format(self.document)
def content_file_name(self, courses):
file_path = "documents/{courses}/{filename}".format(
courses=self.courses, filename=courses)
return file_path
dashboard.html
<div class="col-sm-4">
<select id="crs" class="custom-select custom-select-sm" name="course">
<option selected>option</option>
{% for obj in courses %}
<option value="{{ obj.courseName }}">{{ obj.courseName }}</option>
{% endfor %}
</select>
</div>
【问题讨论】:
-
您的
showDocuments是否有额外的参数(课程名称)? -
@WillemVanOnsem 据我所知,我应该以某种方式使用 request.post[] 从用户那里获取它?
-
是的,这是一种可能性(尽管通常用于搜索的人使用
GET,因为这样就可以共享搜索 URL)。<input name="...">元素的名称是什么(所以映射到要搜索的元素的键)? -
@WillemVanOnsem 我刚刚更新了我的问题,请看一下。
标签: django python-3.x django-models django-forms