Django ForeignKey中的表单控件 [英] Form control in Django ForeignKey

查看:115
本文介绍了Django ForeignKey中的表单控件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的模型:

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


类程序(models.Model):
name = models.CharField(max_length = 30)
faculty = models.ForeignKey(Faculty)


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

让我有两个学院:




  • 科学

  • 管理



我有3个程序:




  • 科学


    • B。电脑

    • B。软件

    • B。民用


  • 管理


    • BBA

    • BBS

    • BBI




我想要的是当一个工作人员填写表格时,他们可以选择教师和课程。所以当用户选择科学作为学院。那么如何使django只从这个选定的学院提供节目?这意味着当用户在Faculty Field中选择Science时,在程序领域中应该显示Computer,Software and Civil。



可以吗?那么怎么样我想我提出了一个明确的问题。 (容易理解我的意思)



更新: - 按照@thameem的要求



forms.py

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

模板:

 < div类= contener > 
< form method =postenctype =multipart / form-data> {%csrf_token%}
{{form.as_p}}

< type =submitvalue =保存>
< / form>
< / div>

urls.py

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

解决方案

你可以使用ajax



您的模板中的代码

 < script type =text / javascriptsrc =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({
方法:get,
dataType:json,
url:'{%url'profile:suggest_program'%}',
data:{
' :value
},
success:function(data){
pselect.empty();
$ .each(data,function(index,value){
pselect.append(< option value ='+ value.pk +'>+ value.name +< / option>);
});
},

});
});

});
< / script>

在您的views.py

  from django.http import JsonResponse 


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

urls.py

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


My Models:

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)

Let I have Two Faculty:

  • Science
  • Management

And I have 3 Programs in each:

  • Science
    • B. Computer
    • B. Software
    • B. Civil
  • Management
    • BBA
    • BBS
    • BBI

And What I want is When A studen Is Filling up a Form They can Select Faculty and Programs. So When a user select Science as Faculty. Then How to make django Gives Only Programs From That selected Faculty? That means when users select Science in Faculty Field Then in program field Computer, Software and Civil should be Shown.

Is it possible? then how? I think I make a clear question. (easy to understand what I mean)

Update:- as asked By @thameem

forms.py

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

Template:

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

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

urls.py

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

解决方案

you can done it by using ajax

put this code in your template

<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>

in your views.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)

urls.py

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

这篇关于Django ForeignKey中的表单控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆