【问题标题】:how to set foreign by post method in django?如何在 Django 中通过 post 方法设置外语?
【发布时间】:2022-11-27 11:06:31
【问题描述】:

模型.py

class Courses(models.Model):
     course_name=models.CharField(max_length=50)
     course_price=models.IntegerField()

class Exam(models.Model):
     exam_name=models.CharField(max_length=101)
     course=models.ForeignKey(Courses,on_delete=models.CASCADE,default='python')
     exam_time=models.DateTimeField()

视图.py

def Examadd(request):
    mycourses = Courses.objects.all()
    context = {'mycourses': mycourses}
    if request.method == 'POST':
        newexam = request.POST.get('examname')
        course = request.POST.get('courses')
        examtime = request.POST.get('time')
        new = Exam.objects.create(exam_name=newexam,course=course,exam_time=examtime)
        new.save()
        messages.success(request, "Course created successfully")
        return redirect('Courselist')
    return render(request,'addexam.html',context

附加考试.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>Add New Exam</h1>
    <form method="post">
        {% csrf_token %}
        <label>Examname:</label>
        <input type="text" name="examname">
        <label>Course:</label>
        <select name="courses">
            {% for i in mycourses %}
            <option value={{i.id}}>{{i.course_name}}</option>
            {% endfor %}
        </select>
        <label>Exam time and date:</label>
        <input type="text" name="examtime">
        <button type="submit">Add</button>
    </form>
</body>
</html>

我正在做一个电子学习项目。我想要一个包含课程的下拉列表并将其 id 传递给考试表。课程 id 是一个外键。我想将 courseid 传递给考试表中的课程列。通过这段代码我得到错误,无法分配“'1'”:“Exam.course”必须是“课程”实例。

【问题讨论】:

    标签: python django django-models django-views django-templates


    【解决方案1】:

    您将主键分配给course_id,因此:

    def Examadd(request):
        mycourses = Courses.objects.all()
        context = {'mycourses': mycourses}
        if request.method == 'POST':
            newexam = request.POST.get('examname')
            course = request.POST.get('courses')
            examtime = request.POST.get('time')
            new = Exam.objects.create(
                exam_name=newexam, course_id=course, exam_time=examtime
            )
            messages.success(request, "Course created successfully")
            return redirect('Courselist')
        return render(request, 'addexam.html', context)

    然而,我建议使用ModelForm,这使得保存数据更容易并且更不容易出错,但也会进行适当的验证:例如检查time确实已通过,并且它被格式化为正确的日期时间细绳。


    笔记:通常一个 Django 模型被赋予一个单数名称,所以 Course 而不是Courses.


    笔记:通常模型字段没有模型名称的前缀。这使得 查询阅读时间较长,并且通常希望使用(抽象)模型的继承来 继承字段,因此使用前缀会降低它的可重用性。因此它 重命名您的字段可能会更好course_namename

    【讨论】:

      猜你喜欢
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      • 2013-04-19
      • 2020-05-16
      相关资源
      最近更新 更多