【问题标题】:How to import values from database into a OptionMenu Django Python如何将数据库中的值导入到 OptionMenu Django Python
【发布时间】:2022-01-21 16:29:47
【问题描述】:

我这里有一个模型页面。

 from django.db import models

class Trainee(models.Model):
TraineeID = models.AutoField(primary_key=True)
Name = models.CharField(max_length=50)
Course = models.CharField(max_length=20)
BatchNo = models.CharField(max_length=15)
DateofBirth = models.CharField(max_length=30)
ContactNo = models.CharField(max_length=20)
ContactAddress = models.CharField(max_length=80)
EmailAddress = models.EmailField()
class Meta():
    db_table = "Trainee"

class Course(models.Model):
CourseID = models.AutoField(primary_key=True)
CourseName = models.CharField(max_length=20)
CourseDuration = models.CharField(max_length=30)
CourseCost = models.CharField(max_length=50)
class Meta():
    db_table = "Courses"

我创建了一个 html 页面,我可以在其中输入数据并保存 Trainee。我想让Course 成为一个OptionMenu 而不是一个字符字段,它只能从Courses 表中保存的数据中选择<select>。因此,如果Courses 表中有保存的数据,如 Java、Python、C 等,则选项菜单 Course 将只有这些。如果它们被删除或添加新的,则选项菜单将相应更改。这是我的 html 页面,我可以在其中输入数据并保存:

{% extends "MyTestApp/base.html" %}
{% block body_block %}
{% load static %}                  
<link rel="stylesheet" href="{% static '/css/bootstrap.min.css'%}" />
<form method="post" action="/trainee/">
{%csrf_token%}

    <div class="container">

        <br/>

        <div class="form-group row">
            <label class="col-sm-1 col-form-label"></label>
            <div class="col-sm-4">
                <h3> Enter Trainee Information </h3>
            </div>
        </div>

        <div class="form-group row">
            <label class="col-sm-2 col-form-label"> Name: </label>
            <div class="col-sm-4">
                {{form.Name}}
            </div>
        </div>

        <div class="form-group row">
            <label class="col-sm-2 col-form-label" for="Course"> Course: </label>
            <div class="col-sm-4">
                    <select name="Course" id="Course">
                        
                            <option value="{{courses.CourseName}}">{{courses.CourseName}}</option>
                        
                    </select>

            </div>
        </div>

        <div class="form-group row">
            <label class="col-sm-2 col-form-label"> BatchNo: </label>
            <div class="col-sm-4">
                {{form.BatchNo}}
            </div>
        </div>

        <div class="form-group row">
            <label class="col-sm-2 col-form-label" for="DateofBirth"> Date Of Birth: </label>
            <div class="col-sm-4">
                <input type="date" name="DateofBirth" id="DateofBirth">
            </div>
        </div>

        <div class="form-group row">
            <label class="col-sm-2 col-form-label"> ContactNo: </label>
            <div class="col-sm-4">
                {{form.ContactNo}}
            </div>
        </div>

        <div class="form-group row">
            <label class="col-sm-2 col-form-label"> ContactAddress: </label>
            <div class="col-sm-4">
                {{form.ContactAddress}}
            </div>
        </div>

        <div class="form-group row">
            <label class="col-sm-2 col-form-label"> EmailAddress: </label>
            <div class="col-sm-4">
                {{form.EmailAddress}}
            </div>
        </div>

        <div class="form-group row">
            <label class="col-sm-2 col-form-label"></label>
            <div class="col-sm-4">
                <button type="submit" class="btn btn-primary"> Submit </button>
            </div>

        </div>
    </div>
</form>
{% endblock %}

我希望我已经说清楚了。任何帮助将不胜感激。在过去的一个月里,我一直被困在这个问题上。

【问题讨论】:

    标签: python html django sqlite


    【解决方案1】:

    如果我正确理解了您正在寻找的问题:

    class Trainee(models.Model):
         ...
         course = models.ForeignKey('Course', on_delete=models.SET_NULL)
         ...
    

    在此处了解更多信息:Django's ForeignKey。 顺便提一句。如果你想遵循推荐的 PEP8 规则,相信我你愿意,模型字段和变量应该是蛇形大小写(小写)。

    views.py 中的表单视图可能需要在其上下文中包含 courses = Course.objects.all(),这取决于您在其中的内容。

    views.py:

    SomeView(AnyView):
        ...
        extra_context = {'courses': Course.objects.all()}
        ...
    

    然后是html表单模板:

    ...
    <select name="course" id="id_course">
    
        {% for course in courses %}               
            <option value="{{ course.id }}">{{ course.course_name }}</option>
        {% endfor %}
    
    </select>
    ...
    

    通常最好传递object.id 的值而不是object.name。名称应该用于人类,ID 用于我们的算法。

    【讨论】:

    • 评论有点晚,但是如何通过 ForeignKey 导入数据。我从一开始就知道 ForeignKey,但它只有整数值,所以我认为它没有用。我试过 {%course in course%} 但它不起作用。在views.py上使用“courses = Course.objects.all()”
    • 我已经用基本的方法编辑了这篇文章,在views.py中添加简单的额外内容,您可以在模板中使用:)
    • 非常感谢你。我被这个困了很长时间。终于可以解决了。我遇到的问题是没有添加 {'courses': courses} 上下文。对于哪些“课程= Course.objects.all()”不起作用。我确实知道我必须添加此上下文,但不知道我可以将两个上下文添加到一个模板。你的回答有助于解决这个问题。再次感谢。
    • 不客气!对于更复杂的内容,您可以定义函数get_context_data,您可以在 Django 的文档中阅读相关内容。如果我的回答令人满意,请将其标记为有效答案。 :)
    猜你喜欢
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多