Django ForeignKey中的表单控件 [英] Form control in 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 = [
pre>
url(r'^ addprofile / $',addprofile,name ='addprofile'),
]
解决方案你可以使用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屋!