如何在django中创建相同字段类型的多个实例?

时间:2016-04-13 14:26:50

标签: django forms dynamic models multiple-instances

让我说我有模特教室:

class Classroom(models.Model):
    name = models.CharField(max_length=255,)
    number_of_students = models.IntegerField()

每个教室可以有不同数量的学生。我想有班级学生与课堂模式相关

class Students(models.Model):
    student_name = models.CharField(max_length=255)
    student_gender = models.CharField(max_length=255)
    classroom = models.ForeignKey(Classroom)

我希望当我输入学生人数以获得每个学生的新表格时。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

number_of_students成为教室的一个属性,只需要一个简单的查询来检索它,就不需要存储任意数字

@property
def number_of_students(self):
    return self.students_set.count()

答案 1 :(得分:0)

我猜你正在寻找的是动态表单生成。几点:

1)执行此操作的最佳方式(IMO)是使用一些JavaScript库来动态附加表单。继续检查用户输入并动态添加/删除表单。您可以使用form_1form_2等ID来区分学生表单。

2)然后,在你的后端,你将遍历POST参数并手动创建学生字段(创建你的课程后)。您如何知道用户填写了多少学生(即已提交了多少学生表格)?将用户输入作为表单中的隐藏字段传递,然后循环遍历它。

这样您就可以为创建课程及其学生提供单一视图。

另一种选择:

1)在StudentCreationForm期间,将学生人数作为额外参数传递给ClassCreationForm(或init)。这要求您在上一页(通过ajax / post)中将您的用户输入的学生数量作为输入。以下链接提供了有关如何实现此目的的优秀教程:

https://jacobian.org/writing/dynamic-form-generation/