Django:不允许的方法(POST)

时间:2017-09-04 17:41:01

标签: django django-forms

我有教室和学生的模型,我使用表格选择教室来显示学生名单。但是,当我在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,我想我知道该怎么做。

0 个答案:

没有答案
相关问题