Django:在单个网页上创建多个类实例,具有外键依赖项

时间:2017-05-29 07:07:25

标签: python django forms django-forms django-views

我的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表单调用,但我觉得必须有更好的解决方案。

1 个答案:

答案 0 :(得分:1)

你要找的是django formsets

  

formset是一个抽象层,用于处理多个表单   同一页。它最好与数据网格进行比较。让我们说你有   以下表格:

还有ModelFormSet

  

与常规表单集一样,Django提供了一些增强的表单集   使Django模型易于使用的类。

这些可用于在单个页面中创建给定模型的多个实例。唯一的麻烦是它有一点学习曲线,用户体验不如使用Angular或React可能获得的那样好。