我有教室和学生的模型,我使用表格选择教室来显示学生名单。但是,当我在block_list.html
上提交表单并尝试转到random_list.html
中的学生列表视图时,我会收到method not allowed (POST)
。
block_list.html: TESTt
<form action="{% url 'classroom:random' %}" method="post">
{% csrf_token %}
<select name="class_block">
{% for room in class_list %}
<option value={{ room.id }}>{{ room.get_course_block_display }}</option>
{% endfor %}
</select>
<input type="submit" value="submit" />
</form>
random_list.html:
{% for s in object_list %}
<ul>
<li>{{ s.nickname }}</li>
</ul>
{% endfor %}
urls.py:
app_name = "classroom"
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^submitted', views.submitted, name='submitted'),
url(r'^classup/$', create_classroom_view, name='classroom'),
url(r'^block/$', views.block, name='block'),
url(r'^random/$', list_random_view, name='random'),
# url(r'^(?P<pk>[0-9]+)/$', detail_classroom_view, name='random'),
]
views.py:
class RandomListView(ListView):
model = Student
template_name = 'classroom/random_list.html'
def get_context_data(self, **kwargs):
context = super(RandomListView, self).get_context_data(**kwargs)
students = Student.objects.all()
# students = Student.objects.filter(classroom__course_block = '24')
print (students)
context['students'] = students
return context
list_random_view = RandomListView.as_view()
def block(request):
class_list = Classroom.objects.all()
template = loader.get_template('classroom/block_list.html')
context ={ 'class_list' : class_list, }
return HttpResponse(template.render(context, request))
models.py:
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)
group_size = models.IntegerField(default=3)
def __str__(self):
return self.get_course_block_display()
def save(self, *args, **kwargs):
super(Classroom, self).save(*args, **kwargs)
# overrides the default save function to parse the class list
studentList = []
studentList = self.class_list.split('\n')
print (studentList)
for line in studentList:
line = line.strip('\r')
s = Student.objects.create(nickname = line, classroom = self)
class Student(models.Model):
classroom = models.ForeignKey(Classroom, on_delete=models.CASCADE)
student_first = models.CharField(default='John', max_length=30)
student_last = models.CharField(default='Smith', max_length=30)
nickname = models.CharField(default='JohnS', max_length=31)
attend = models.BooleanField(default=True)
我知道我还没有过滤特定区块的list_random_view,我想我知道该怎么做。