我有一个ModelForm,我想用一个清单项目的动态列表进行扩展。因此,用户只有在勾选所有复选框时才可以创建我的模型的实例,而这些复选框实际上并不属于模型本身。
清单和与之对应的清单清单项目是动态创建的,将来会更改。
class Checklist(models.Model):
name = models.CharField(max_length=100)
class ChecklistItem(models.Model):
checklist = models.ForeignKey(Checklist, on_delete=models.CASCADE)
text = models.CharField(max_length=100)
details = models.TextField(blank=True)
因此,在表格末尾,它应该看起来像这样(类似于接受服务条款):
我无法提出一种如何将每个清单的项目分组的解决方案。
如果我只想列出每个项目,而不关心它属于什么清单,我可以做:
class SomeForm(forms.ModelForm):
model = SomeModel
fields = ['some_attribute', 'another_attribute']
def __init__(self, *args, **kwargs):
super(SomeForm, self).__init__(*args, **kwargs)
for checklist in Checklist.objects.all():
for item in checklist.checklistitem_set.all():
self.fields[item.text] = forms.BooleanField(required=True)
但是那不是我想要的。我也不知道如何以这种方式访问ChecklistItem的details属性(例如,用于工具提示)。
有人知道如何实现此效果的优雅解决方案吗?