我有一个名为Course的模型:
class Course(models.Model):
number_of_semesters = models.PositiveIntegerField()
field = models.CharField(max_length=30)
qualification = models.ForeignKey(Qualification, on_delete=models.CASCADE)
我正在尝试获取一个表单,您可以从该页面输入用户想要的多个课程。我该怎么做?
答案 0 :(得分:1)
我知道这是旧的,但我建议您使用Django Rest Framework。虽然一开始有点棘手,但您可以使用ViewSets和Serializers来获取多个对象并立即将它们保存在数据库中。 (顺便说一句,即使它用于API,您也可以轻松地用ViewSets替换普通的Django视图并将它们用作标准)。
我知道这实际上并不是你提出的要求,但我现在已经在Django中开发了一段时间了,而且我还没有能够以一种干净的方式使用formset来保存N个对象而不知道N. / p>
如果您决定接受我的建议,我建议您阅读以下内容:
Viewsets
序列化程序(它们与DjangoForms基本相同)
嵌套的Serializers(用于渲染/创建/链接您的ForeignKey实例)
{{1}}
答案 1 :(得分:-1)
您可以这样做的一种方法是不使用formset,而是使用用于加载表单的前缀来获得创意。例如,+按钮加载一个空的表单,其前缀基于发布到视图的计数器(包括标记,类似“course-4”),因此您可以获得带有SomeForm(request.POST, prefix="course-4")
的表单。在验证/保存视图时,您只需从POST解析前缀(使用正则表达式)并为每个前缀保存一个表单。
似乎比简单地使用formset更多的工作,但每次我尝试使用它们时我都不得不放弃它们,因为它们没有提供足够的灵活性。