在Django中显示用户选择的数据库表的内容

问题描述 投票:0回答:1

根据用户选择,我想显示课程详细信息。我不想为每个课程详细信息创建多个页面。 因此,在

course-detail.html
我以 html 形式传递一个
course-code
作为隐藏值,这是我的数据库项目中的表名称。 当用户提交课程查询时,我通过
POST
方法将课程代码值传递到我的
views.py
文件中。 但在那里我无法使用 post 方法字符串作为模型名称。

courses.html

{% for courses in english_courses %}
<form action="{% url "course-detail" %}" method="POST">
    {% csrf_token %}
    <input type="hidden" name="course-code" value="{{courses.course_code}}">
  <button class="btn-lg btn-primary d-inline-flex align-items-center" type="submit" onclick="document.location.href='{% url "course-detail" %}';">
    {{course.name}}
  </button>
  &nbsp;
  {% endfor %}</form>

views.py

def course_detail(request):
    if request.method == "POST":
        course_request = request.POST['course-code']
        course_request = course_request.capitalize()
        course_details = course_request.objects.all()
        return render(request, 'course-detail.html', {'course': course_details})  
    else:
        messages.warning(request, "Link seems to be broken. Please contact admin.")
        return render(request, 'course-detail.html')

这会引发错误:

AttributeError at /english/course-detail
'str' object has no attribute 'objects'
django database django-models django-views model
1个回答
0
投票

首先,您必须通过 POST 请求从用户处接收课程名称或课程 ID,并通过过滤该 ID 显示内容详细信息。

from .model import course <- # New

def course_detail(request):
    if request.method == "POST":
        course_request = request.POST['course-code']
        course_request = course_request.capitalize()
        course_details = course.objects.filter(course-code=course_request) <- # New
        return render(request, 'course-detail.html', {'course': course_details})  
    else:
        messages.warning(request, "Link seems to be broken. Please contact admin.")
        return render(request, 'course-detail.html')
© www.soinside.com 2019 - 2024. All rights reserved.