django动作与中间页面keyerror

时间:2017-02-24 19:19:12

标签: python django action admin

我是django的新手,我正在做我的第一个教育项目。我想用中间页面做一个动作,但我收到: KeyError at / admin / students / student /'action ' 情形:

  1. 用户从“操作”列表框中选择,操作名为: u'Переміститиугрупу'
  2. 按下
  3. 应显示新页面,其中包含学生列表和列表框以选择组。 请解释我的错误在哪里。我的代码如下:

    class UpdateGroupForm(forms.Form):
        group = forms.ModelChoiceField(queryset=Group.objects.all().order_by('title'), required=False)
    
    
    def update_group(modeladmin,request,queryset):
        if 'change_group' in request.POST:
            form=UpdateGroupForm(request.POST)
            if form.is_valid():
                group=form.cleaned_data['group']
                updated_group=queryset.update(student_group=group)
                counter=queryset.count()
                modeladmin.message_user(request,u"У %s студентів було змненно групу на %s")%(counter,group)
                return
    
        if not form:
            form= UpdateGroupForm()
        return (request,'/students/change_group.html',{'students':queryset,'form':form,'title':u'Зміна групи'})
    update_group.short_description=u'Перемістити у групу'
    
    class StudenAdmin(admin.ModelAdmin):
        action_form = UpdateGroupForm
        actions = [update_group]
        list_display = ['last_name','first_name' ,'ticket','student_group']
        list_display_links = ['last_name','first_name']
        list_editable = ['student_group']
        ordering = ['last_name']
        list_filter = ['student_group']
        list_per_page = 10
        search_fields = ['last_name','first_name' ,'ticket','notes']
        def get_view_on_site_url(self, obj):
            return reverse ('students_edit',kwargs={'pk':obj.id})
    

1 个答案:

答案 0 :(得分:0)

我的网页代码:

{%extends" admin / base_site.html" %}

{%block content%}

<form action="" method="post">
    {% csrf_token %}
    {{ form }}
    <p>Групу буде змінено у таких студентів:</p>
    <ul>{{ students|unordered_list }}</ul>
    <input type="hidden" name="action" value="update_group" />
    <input type="submit" name="change_group" value="Зберігти" />
</form>
{% endblock %}

这是我模特的代码:

class Student (models.Model):
    """Student Model"""
    class Meta (object):
        verbose_name=u"Студент"
        verbose_name_plural=u"Студенти"


    first_name=models.CharField(max_length=256,blank=False,verbose_name=u"Ім'я")
    last_name=models.CharField(max_length=256,blank=False,verbose_name=u"Прізвище")
    middle_name=models.CharField(max_length=256,blank=True,verbose_name=u"По-батькові")
    birthday=models.DateField(blank=False,verbose_name=u"Дата народження",null=True)
    photo=models.ImageField(blank=True,verbose_name=u"Фото",null=True)
    ticket=models.CharField(max_length=256,blank=False,verbose_name=u"Білет")
    student_group=models.ForeignKey('Group',verbose_name=u"Група",blank=False,null=True,on_delete=models.PROTECT)
    notes=models.TextField(blank=True,verbose_name=u"Додаткові нотатки")

    def __unicode__(self):
        return u"%s %s" % (self.first_name,self.last_name)



# post_delete signal deletes student photo
post_delete.connect(remove_photo,Student)

class Group (models.Model):
    """Group Model"""
    class Meta(object):
        verbose_name=u"Група"
        verbose_name_plural=u"Групи"

    title=models.CharField(max_length=256,blank=False,verbose_name=u"Назва")
    leader=models.OneToOneField('Student',verbose_name=u"Староста",blank=True,null=True,on_delete=models.SET_NULL)
    notes=models.TextField(blank=True,verbose_name=u"Додаткові нотатки")


    def __unicode__(self):
        if self.leader:
            return u"%s(%s %s)"%(self.title,self.leader.first_name,self.leader.last_name)
        else:
            return  u"%s"%(self.title)