我的models.py
中有以下代码:
class Application(models.Model):
team_name = models.CharField(max_length=100)
...
class Participant(models.Model):
name = models.CharField(max_length=100)
grade = models.SmallIntegerField(choices=GRADE_CHOICES, blank=True, null=True)
application = models.ForeignKey(Application, related_name="participants")
...
即。有多个Participants
,每个Participant
都在一个应用程序上。 (定义每个Application
恰好有8 Participants
)。
此代码的预期目的是用户将能够创建一个新的应用程序,他/她将在其上命名为8 Participants
。创建Application
后,还应创建并链接8个Participants
的新实例,以便每个Participant
都将新创建的Application
作为其外键。
我目前正在努力创建一个处理此创建过程的表单/视图。我希望用户成为一个单独的网页,提供输入表单,允许用户创建一个新的Application
(名称等),以及8个新的Participants
(每个都有一个名字,等级等。)
我当前的forms.py
有:
class ApplicationForm(forms.ModelForm):
"""
A form that edits an application and all of its participants.
"""
nationality = forms.CharField(disabled=True, required=False)
class Meta:
model = Application
fields = '__all__'
但我意识到这并不会向用户显示创建此Participants
创建8个新Application
所需的内容。如何修改我的forms.py
以包含空间,以便用户通过创建Participants
创建8 Application
?
我能想到的唯一解决方案是在一个视图中手动列出8个Participant
表单调用,但我觉得必须有更好的解决方案。
答案 0 :(得分:1)
你要找的是django formsets
formset是一个抽象层,用于处理多个表单 同一页。它最好与数据网格进行比较。让我们说你有 以下表格:
与常规表单集一样,Django提供了一些增强的表单集 使Django模型易于使用的类。
这些可用于在单个页面中创建给定模型的多个实例。唯一的麻烦是它有一点学习曲线,用户体验不如使用Angular或React可能获得的那样好。