如何解决根据Django中的其他字段修改表单字段
我有一个包含多个字段的表单。假设其中一个是“subjects”,一个多选选择字段,另一个是“main_subject”,一个单选选择字段。如果选择了相应的“main_subject”,我应该如何编码 views.py 文件以自动选择“主题”中的主题? (我不想为学生保存一个主要科目,如果它没有作为他的科目之一)。
models.py
class Subject(models.Model):
subject=models.CharField(primary_key=True,max_length=100)
class Student(models.Model):
name=models.CharField(primary_key=True,max_length=100)
main_subject=models.ForeignKey(Subject,on_delete=models.SET_NULL,null=True)
class StudentSubject(models.Model):
id = models.UUIDField(primary_key=True,default=uuid.uuid4,editable=False)
name = models.ForeignKey(Student,on_delete=models.CASCADE)
subject = models.ForeignKey(discipline,on_delete=models.CASCADE)
class Meta:
constraints = [models.UniqueConstraint(fields=['name ','subject '],name='uniqueStudentSubject')]
forms.py
class NewStudentForm(forms.ModelForm):
class Meta:
model=Student
fields=['name','main_subject']
widgets={'name': forms.Textinput(),'main_subject': forms.Select()}
subjects = forms.ModelMultipleChoiceField(
widget=forms.CheckBoxSelectMultiple(),queryset=Subject.objects.all(),required=False
)
views.py
def new_student(request):
if request.method == 'POST':
form = NewStudentForm(request.POST)
if form.is_valid():
form.save(commit=True)
for stu in form.cleaned_data['subjects']:
StudentSubject.objects.create(
name=Project.objects.get(pk=request.POST['name']),subject=Subject.objects.get(pk=stu)
)
# SOMETHING ELSE......... #
解决方法
正如@Deniz 所说,我认为它是由 JavaScript 完成的。直到几个小时前我才知道 JS,所以我不确定这是最好的解决方案,但对我来说,它有效。 只需将以下内容添加到 html 文件中即可(显然要考虑项目中每个元素的相应 ID):
<script type="text/javascript">
var main_subject_list = document.getElementById("id_main_subject");
main_subject_list.addEventListener("change",function() {
for (var i = 0; i < main_subject_list.options.length; i++) {
var option = main_subject_list.options[i];
if (option.selected) {
var checkbox_to_select = document.getElementById("id_subject_" + (i - 1)).click();
}
}
});
</script>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。