【发布时间】:2021-03-22 03:36:51
【问题描述】:
使用 Javascript 函数编辑
我对 django 还是很陌生,但我在使用表单时遇到了一些问题。
目前我有一个包含 10 个字段的表单。但是,我正在寻找的是两个选择字段之间的特定内容。我希望通过选择第一个 Select 字段来过滤我的第二个 Select 字段。我的模型已连接到 bdd。
models.py
class Mission(models.Model):
fk_consultant = models.ForeignKey(Consultant, on_delete = models.PROTECT)
manager = models.CharField(max_length = 3, blank = True, null = True)
project_name = models.CharField(max_length = 50)
class Consultant(models.Model):
matricule = models.CharField(max_length = 30, blank = True, unique = True)
name = models.CharField(max_length = 50)
first_name = models.CharField(max_length = 50)
fk_teams_gestion = models.ManyToManyField(Team, related_name='gestion', blank=True)
这里的 fk_consultant 对应的是 Consultant 中的一个顾问 ID(我们在模型中看不到它,它在推入数据库时会自动递增)
forms.py
class MissionForm(forms.ModelForm):
def __init__(self, cslt, *args, **kwargs):
super(MissionForm, self).__init__(*args, **kwargs)
self.fields['fk_consultant'].widget = forms.Select(
attrs={'class': "form-control", "onClick": "fillCsltInfo(this.id, value)"}, choices=[('', '')] + [(c.id, c) for c in cslt])
self.fields['project_name'].widget = forms.Select(attrs={'class': "form-control"},
choices=[('', '')])
class Meta:
model = Mission
fields = ['fk_consultant', project_name']
labels = {
'fk_consultant': "Consultant*",
'project_name': "Name of the project*"
widgets = {
'fk_consultant': forms.Select(attrs={'class': "form-control"}),
'project_name': forms.TextInput(attrs={'class': "form-control"})
}
views.py
mission_form = MissionForm(cslt, auto_id='id_start_%s') #where cslt is a list of Consultant model
myfile.js
function fillCsltInfo(id, val){
var form_start_project = document.getElementById('id_start_project_name');
form_start_project.value= val;
}
id 所做的是在 select 中选择被选中的顾问,但是我看不到如何获取 Mission 数据并对其进行过滤。
所以我想在单击 Select 字段时执行过滤器,然后将结果填充到我的第二个 Select 字段中。一个顾问有零个或 n 个任务,一个任务只有一个顾问。
这可能吗?我环顾四周,找到了复杂的答案(例如使用 kwargs CHOICES 但我不明白如果这是我想要的)django documentation
【问题讨论】:
标签: python django django-forms