我正致力于创建一个拥有程序且这些程序存在风险的数据库。一些背景信息:程序(祖父母)具有多个特征(父母),其具有多个类别(儿童)。我已经构建了一个包含这些数据库的数据库,但是,我想为特定程序添加风险。
也就是说,例如我有风险1,我想添加到程序1.我必须回答以下问题:风险1有哪些特征?要回答这个问题,我想构建一个动态表单字段。 (注意,特征量可以是任意数量,以及每个特征所具有的类别数量)。
我如何构建这样的表格?我已经尝试过了formsets,但是我不知道如何以实用的方式实现它们(我对Python仍然有点新)。
这是我希望如何实施的打印屏幕:https://gyazo.com/40c448c0096a9ec5da751ba9883dc912
但是,我不知道该怎么做。 (请注意,下拉菜单中可能的答案是与该特定特征对应的类别)。
这就是我得到的:https://gyazo.com/25fd18e2f31e6931bfd3639ce4be632c
这是我到目前为止的相应代码:
# views.py
def risk_create(request):
program = get_object_or_404(Program, id=20)
RiskFormSet = formset_factory(RiskForm, ...
... extra=len(Program.objects.get(id=program.id).char_set.all()))
context = {
'title': 'New Risk',
'form': RiskFormSet
}
return render(request, 'risk_form.html', context)
# forms.py
class RiskForm(forms.Form):
for char in Program.objects.get(id=20).char_set.all():
char = forms.ModelChoiceField(char.cat_set.all(), label=char)
我发现了我的答案。
class RiskForm(forms.Form):
def __init__(self, *args, **kwargs):
programid = kwargs.pop('programid', None)
super(RiskForm, self).__init__(*args, **kwargs)
for i in range(0,len(Program.objects.get(id=programid).char_set.all())):
charid = Program.objects.get(id=programid).char_set.all()[i].id
charlabel = Program.objects.get(id=programid).char_set.all()[i].label
self.fields['char_field_%i' %i] = forms.ModelChoiceField(Char.objects.get(id=charid).cat_set.all(), label=charlabel)