Django-无法在下拉列表中检索数据库中的数据

时间:2018-09-01 03:54:50

标签: python mysql django

您好,我确实需要帮助,已经尝试了很多天,但仍然无法解决。我是Django的新手。

问题:我无法在MySQL数据库中检索数据以将其显示在下拉列表中。有谁可以帮助我吗?非常感谢!

models.py

class paper(models.Model):
id = models.CharField(max_length=70, primary_key=True, null=False)
year = models.TextField(null=True)
month = models.TextField(null=True)
number = models.IntegerField(null=True)

def __str__(self):
    return str(self.id)

Views.py

def dropdown_list(request):
paper = paper.objects.all()
pname = request.GET.get('paper_id')
context = {
    "paper": paper,
    "name": pname
}
return render(request, 'exampapersNew/exampaper.html', context)

exampaper.html

        <form id="form1" method="GET">
      {% csrf_token %}
      <u>SELECT YEAR</u><br><br>
      <select>
        {% if paper %}
        {% for p in paper %}
            <option value="{{ p.id }}">{{ p.year }} {{ p.month }} Paper {{ p.number }}</option>
        {% endfor %}
        {% endif %}
      </select>
    </form>

urls.py

urlpatterns = [
  url(r'^admin/', admin.site.urls),
  url(r'^feedback/', include('feedback.urls')),
  url(r'^exampapersNew/', include('exampapersNew.urls')),
  url(r'^$', views.HomeView, name = 'home'),
  url(r'^feedback', views.FeedbackM, name = 'feedback'),
  url(r'^exampapersNew', views.ExampapersNewView, name = 'exampapersNew'),
  url(r'^frequentlyasked', views.FrequentlyaskedView, name = 'frequentlyasked'),
  url(r'^api/', include(v1_api.urls)),

  url(r'^exampapersNew/<int:paper_id>/', views.EMaths_Menu, name = 'paper_archive'),
  url(r'^formula', views.e_math_concept, name = 'formula'),
]

forms.py

class DropdownForm(forms.Form):
class Meta:
    model = paper
    fields = ['id', 'year', 'month', 'number']

mySQL表

mysql> SELECT * from exampapersnew_paper;
+-----------+------+----------+--------+
| id        | year | month    | number |
+-----------+------+----------+--------+
| 200801001 | 2008 | November |      1 |
| 200801002 | 2008 | November |      2 |
| 200901001 | 2009 | November |      1 |
+-----------+------+----------+--------+
3 rows in set (0.00 sec)

3 个答案:

答案 0 :(得分:0)

render函数需要传递一些上下文。您仅表示要渲染的位置,而不是上下文。 示例:

def product_list(request):
    category = Category.objects.all()
     context = {
               'category': category,
    }
    return render(request, 'shop/product/list.html', context)

请注意,这里的类别是在list.html中呈现的,因为上下文是通过render函数传递的。

答案 1 :(得分:0)

尝试一下,选择

{% if paper %}
{% for p in paper %}
    <option value="{{ p.id }}">{{ p.year }} {{ p.month }} Paper {{ p.number }} </option>
{% endfor %}
{% endif %}

也请阅读本教程django tutorial part 3

django模型还具有默认的主键属性,您也可以使用它。

答案 2 :(得分:0)

首先最好用大写字母(class Paper(models.model))给班级命名

第二,我认为您的网址应类似于
url(r'^exampapersNew/?paper_id=<int:paper_id>/', views.EMaths_Menu)
paper_id前面的问号,以便通过request.GET.get('paper_id')

获取paper_id

我正在竭尽全力为您提供帮助,但是如果没有所有代码,我将无法理解您要做什么。请把您的代码推送到github,让我知道。