0
我對課堂的模型和學生如下圖所示如何通過ModelForm ForeignKey創建模型對象?
class Classroom(models.Model):
COURSE_NAME = (
('MA8', 'Math 8'),
('SC10', 'Science 10'),
('PH11', 'Physics 11'),
('PH12', 'Physics 12'),
)
BLOCK_NUMBER = (
('11', 'Block 1-1'),
('12', 'Block 1-2'),
('13', 'Block 1-3'),
('14', 'Block 1-4'),
('21', 'Block 2-1'),
('22', 'Block 2-2'),
('23', 'Block 2-3'),
('24', 'Block 2-4'),
)
class_list = models.TextField()
course_name = models.CharField(max_length=20, choices=COURSE_NAME)
course_block = models.CharField(max_length=10, choices=BLOCK_NUMBER)
class Student(models.Model):
classroom = models.ForeignKey(Classroom, on_delete=models.CASCADE)
nickname = models.CharField(default='JohnS', max_length=31)
attend = models.BooleanField(default=True)
我創建了一個表格課堂。 class_list
和TextField是用戶複製/粘貼名稱列表的地方。然後我想解析class_list
並將每個單獨的名稱保存爲nickname
。我第一次嘗試以下,但這似乎並沒有保存學生對象。
forms.py
class ClassroomForm(ModelForm):
class Meta:
model = Classroom
fields = ['course_name', 'course_block','class_list']
views.py
class ClassroomCreateView(CreateView):
model = Classroom
form_class = ClassroomForm
def form_valid(self, form):
classroom = form.save(commit=False)
s = Student()
for line in classroom.class_list:
s.nickname = line
s.save()
classroom.save()
return super(ClassroomCreateView, self).form_valid(form)
def get_success_url(self):
return reverse('classroom:submitted')
我還試圖創建StudentForm,其允許用戶選擇course_name
和course_block
(其對應於特定class_list
)。窗體或視圖將創建單獨的Student對象並顯示它們。我閱讀了ModelChoiceField,但我無法弄清楚如何實現這一點。
如何以及在哪裏(自動)從ForeignKey字段創建學生對象?