如何将数据存储在DJNGO中的下拉中的数据库中

发布于 2025-02-13 04:45:20 字数 3260 浏览 1 评论 0原文

我正在从事学生管理项目,我无法获得学生的分支机构,因为它当然是欧洲模型的学生模型,我想将选定的选项纳入分支机构的学生模型

models.py.py:

class Course(models.Model):
    id=models.AutoField(primary_key=True)
    course = models.CharField(max_length=50)
    course_code = models.BigIntegerField(null=True)
    
    def __str__(self):
        return self.course

class Student(models.Model):
    id=models.AutoField(primary_key=True)
    user=models.OneToOneField(User,on_delete=models.CASCADE)
    branch=models.ForeignKey(Course,on_delete=models.CASCADE,null=True,blank=True)
    middle_name=models.CharField(max_length=50,null=True)
    roll_no=models.IntegerField()
    mobile_no=PhoneNumberField(default='')
    parents_mobile_no=PhoneNumberField(default='')
    division=models.CharField(max_length=10,null=True)
    batch=models.CharField(max_length=10,null=True)
    
    def __str__(self):
        return self.user.first_name + " " + self.user.last_name

views.py:

def studentregister(request):
    if request.method == 'POST':
        first_name = request.POST['first_name']
        middle_name = request.POST['middle_name']
        last_name = request.POST['last_name']
        email = request.POST['email']
        branch= request.POST['branch']
        division = request.POST['division']       
        roll_no = request.POST['roll_no']
        mobile_no = request.POST['mobile_no']
        parents_mobile_no = request.POST['parents_mobile_no']
        pass1 = request.POST['password']
        pass2 = request.POST['confirmpassword']
        
        if pass1 == pass2 :
            if User.objects.filter(email=email).exists():
                return HttpResponse('User already exsits')
            else:
                user = User.objects.create_user(email=email, password=pass1, first_name=first_name, last_name=last_name)
                user.save();
                studentdetails = Student ( user=user, middle_name=middle_name,roll_no=roll_no,mobile_no=mobile_no,parents_mobile_no=parents_mobile_no, branch=branch,division=division)
                studentdetails.save();
                return render (request, 'ms/homepage/index.html')
        else:
            return HttpResponse('password does not match')
    else:
        return HttpResponse('failed')

def staffstudent(request):
    if request.user.is_authenticated and request.user.user_type==3:
        courses = Course.objects.all()
        return render(request, 'ms/staff/student.html',{'courses':courses})
    else:
        return render(request,'ms/login/login.html')

html文件作为student.py:

<form action="studentregister" method="POST" style = "background-color:#011B3C;">
            {% csrf_token %}
<div class="form-group" name="branch">
            <select >
                <option selected disabled="true">Branch</option>
                {% for course in courses%}
                <option>{{course.course}}</option>
                {%endfor%}
            </select>
            </div> 
</form>

我遇到的错误是 MultivalueDictKeyError AT /suspert /StudentRegister “分支”

请尽快帮助我。

I am working on student management project and I am unable to get the branch for student as it is foreignkey of Course model to Student model and I want to get the selected option into student model in branch row

models.py:

class Course(models.Model):
    id=models.AutoField(primary_key=True)
    course = models.CharField(max_length=50)
    course_code = models.BigIntegerField(null=True)
    
    def __str__(self):
        return self.course

class Student(models.Model):
    id=models.AutoField(primary_key=True)
    user=models.OneToOneField(User,on_delete=models.CASCADE)
    branch=models.ForeignKey(Course,on_delete=models.CASCADE,null=True,blank=True)
    middle_name=models.CharField(max_length=50,null=True)
    roll_no=models.IntegerField()
    mobile_no=PhoneNumberField(default='')
    parents_mobile_no=PhoneNumberField(default='')
    division=models.CharField(max_length=10,null=True)
    batch=models.CharField(max_length=10,null=True)
    
    def __str__(self):
        return self.user.first_name + " " + self.user.last_name

views.py:

def studentregister(request):
    if request.method == 'POST':
        first_name = request.POST['first_name']
        middle_name = request.POST['middle_name']
        last_name = request.POST['last_name']
        email = request.POST['email']
        branch= request.POST['branch']
        division = request.POST['division']       
        roll_no = request.POST['roll_no']
        mobile_no = request.POST['mobile_no']
        parents_mobile_no = request.POST['parents_mobile_no']
        pass1 = request.POST['password']
        pass2 = request.POST['confirmpassword']
        
        if pass1 == pass2 :
            if User.objects.filter(email=email).exists():
                return HttpResponse('User already exsits')
            else:
                user = User.objects.create_user(email=email, password=pass1, first_name=first_name, last_name=last_name)
                user.save();
                studentdetails = Student ( user=user, middle_name=middle_name,roll_no=roll_no,mobile_no=mobile_no,parents_mobile_no=parents_mobile_no, branch=branch,division=division)
                studentdetails.save();
                return render (request, 'ms/homepage/index.html')
        else:
            return HttpResponse('password does not match')
    else:
        return HttpResponse('failed')

def staffstudent(request):
    if request.user.is_authenticated and request.user.user_type==3:
        courses = Course.objects.all()
        return render(request, 'ms/staff/student.html',{'courses':courses})
    else:
        return render(request,'ms/login/login.html')

html file as student.py:

<form action="studentregister" method="POST" style = "background-color:#011B3C;">
            {% csrf_token %}
<div class="form-group" name="branch">
            <select >
                <option selected disabled="true">Branch</option>
                {% for course in courses%}
                <option>{{course.course}}</option>
                {%endfor%}
            </select>
            </div> 
</form>

The error I am getting is
MultiValueDictKeyError at /staff/studentregister
'branch'

Please help me with this as soon as possible.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不打扰别人 2025-02-20 04:45:21

尽管可以做到这一点,但这并不是处理Django表格的常规方式。惯例将是:

以形式创建一个forms.py这样的形式:

class MyForm(forms.Form):

dropdown_one = forms.ChoiceField(
    label="Country",
    widget=forms.Select(attrs={"class": "selecter form-control"}),
    choices=[],
)
dropdown_two = forms.ChoiceField(
    label="Category",
    widget=forms.Select(attrs={"class": "selecter form-control"}),
    choices=[(None, '...')],
    required=True

)

在views.py中使用此

my_form = MyForm(initial={})
return render(request,{'my_form':my_form})

然后

        {{my_form.media}}
        {% for item in my_form %}
        <div class="form-group col-lg-2" id="dropdown-content">
          {{item.label_tag}}
          {{item}}
        </div>
        {% endfor %}  
      </div>

表单

。 com/en/4.0/topics/forms/“ rel =” nofollow noreferrer“> https://docs.djangoproject.com/en/4.0/topics/forms/

This is not the conventional way to deal with Forms in Django although it can be done. Convention would be:

Creating a form in forms.py like so:

class MyForm(forms.Form):

dropdown_one = forms.ChoiceField(
    label="Country",
    widget=forms.Select(attrs={"class": "selecter form-control"}),
    choices=[],
)
dropdown_two = forms.ChoiceField(
    label="Category",
    widget=forms.Select(attrs={"class": "selecter form-control"}),
    choices=[(None, '...')],
    required=True

)

Then use this form in views.py like so:

my_form = MyForm(initial={})
return render(request,{'my_form':my_form})

Then finally in html file:

        {{my_form.media}}
        {% for item in my_form %}
        <div class="form-group col-lg-2" id="dropdown-content">
          {{item.label_tag}}
          {{item}}
        </div>
        {% endfor %}  
      </div>

For more refer to this:

https://docs.djangoproject.com/en/4.0/topics/forms/

屋檐 2025-02-20 04:45:20

您尚未命名该&lt; select&gt;&lt; select name =“ branch”&gt;),因此您在其中做出的任何选择都不会传输到服务器,这就是为什么您会遇到关键错误的原因。

此外,&lt; option&gt;的值必须是课程的ID:

<option value="{{ course.id }}">{{ course.course }}</option>

...您可以在视图中查找:

branch = Course.objects.get(id=request.POST['branch'])

但是, please 查看<< a href =“ https://docs.djangoproject.com/en/4.0/topics/forms/” rel =“ nofollow noreferrer”> django的内置表单功能,尤其是模型表格 - 您将在您现在拥有的HTML和Python代码的一小部分中完成,而且您实际上将具有正确的数据验证。

You haven't named that <select> (<select name="branch">) so any choice you make in it will not be transmitted to the server, and that's why you get a key error.

In addition, the <option>'s value must be the course's id:

<option value="{{ course.id }}">{{ course.course }}</option>

... so you can look it up in the view:

branch = Course.objects.get(id=request.POST['branch'])

However, please look at Django's built-in forms functionality, especially model forms – you would be done in a fraction of the HTML and Python code you have now, plus you'd actually have correct data validation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文