Django ForeignKey中的窗体控件

2024-05-15 13:06:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我的模型:

class Faculty(models.Model):
    name = models.CharField(max_length=30)


class Program(models.Model):
    name = models.CharField(max_length=30)
    faculty = models.ForeignKey(Faculty)


class Student(models.Model):
    name = models.CharField(max_length=30)
    faculty = models.ForeignKey(Faculty)
    program = models.ForeignKey(Program)

我有两个教员:

  • 科学
  • 管理

我有三个程序:

  • 科学
    • B.计算机
    • B.软件
    • B.民事诉讼
  • 管理
    • 工商管理学士
    • 论坛
    • 工商管理学院

我想要的是,当学生填写表格时,他们可以选择教师和课程。所以当用户选择科学作为教员时。那么,如何让django只提供选定教员的课程呢?这意味着当用户选择科学在教师领域,然后在程序领域计算机,软件和民用应显示。你知道吗

有可能吗?那怎么办?我想我问得很清楚。(很容易理解我的意思)

更新:-按照@thameem的要求

你知道吗表单.py你知道吗

class StudentForm(forms.ModelForm):
    class Meta:
        model = Student
        fields = {'name','faculty','program','roll','gender','contact','address','about',}

模板:

<div class="contener">
<form method="post" enctype="multipart/form-data">{% csrf_token %}
            {{form.as_p}}

            <input type="submit" value="Save">
</form>
</div>

你知道吗网址.py你知道吗

urlpatterns = [
url(r'^addprofile/$', addprofile, name='addprofile'),
]

Tags: nameformmodelmodels科学programlengthmax
1条回答
网友
1楼 · 发布于 2024-05-15 13:06:14

您可以通过使用ajax来完成

将此代码放入模板中

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script>

    $(document).ready(function(){

        $("select[name='faculty']").change(function(){
            var value =  $(this).val();
            var pselect = $("select[name='program']");

            $.ajax({
                method:"get",
                dataType:"json",
                url:'{% url 'profile:suggest_program' %}',
                data:{
                'faculty':value
                },
                success:function(data){
                    pselect.empty();
                    $.each(data, function(index, value){
                        pselect.append("<option value='"+value.pk+"'>"+value.name+"</option>");
                    });
                },

            });
        });

    });
    </script>

在你的视图.py你知道吗

from django.http import JsonResponse


def suggest_program(request):
    faculty = request.GET.get("faculty")
    programs = [{"data":"nothing found"}]
    if faculty:
        programs = Program.objects.filter(faculty_id=faculty
                                            ).values("pk", "name")
        programs = list(programs)
    return JsonResponse(programs, safe=False)

你知道吗网址.py你知道吗

url(r'^suggest-program/$', views.suggest_program, name="suggest_program"),

相关问题 更多 >