我们如何通过django中基于类的通用视图来保存表单

时间:2015-02-19 10:59:16

标签: django django-forms django-class-based-views

我在Subject_En滚动应用程序中使用基于类的通用视图

我的view.py是

cc = 0
@login_required
def add_subject_enroll(request):

    user = request.user

    obj = StudentRegistration.objects.get(user=user)
    print "obj.first_name",obj.first_name
    first_name = obj.first_name
    print "first_name",first_name
    if obj.user:
        print "object exist"
        #form = Subject_EnrollForm(request.POST or None, initial={'student_name' : first_name})
        #form = Subject_EnrollForm( initial={'student_name' : obj.first_name})

        form = Subject_EnrollForm(request.POST or None, request.FILES or None)

        form.fields["student_name"].initial = first_name
        form.fields["birth_place"].initial = obj.birth_place
        form.fields["gender"].initial = obj.gender
        form.fields["phone"].initial = obj.phone
        form.fields["email"].initial = obj.email
        form.fields["phone"].initial = obj.phone
        form.fields["nationality"].initial = obj.nationality
        form.fields["religion"].initial = obj.religion
        form.fields["blood_group"].initial = obj.blood_group
        form.fields["nationality"].initial = obj.nationality
        form.fields["nationality"].initial = obj.nationality
        form.fields["nationality"].initial = obj.nationality
        form.fields["nationality"].initial = obj.nationality
    else:
        print "object not found"
        Subject_EnrollForm(request.POST or None, request.FILES or None)    

    if request.POST:

        if form.is_valid():
            a = form.save()

            a.user = request.user
            a.save()
            #user.save()

            messages.add_message(request,messages.SUCCESS, "your Profile was added")

            #return HttpResponseRedirect('/app/all')
            return HttpResponseRedirect('/')


    args = {}
    args.update(csrf(request))

    args['form'] = form
    context = RequestContext(request,
                           {'request': request,
                            'user': request.user,
                            'form': form})
    return render_to_response('subject_enroll/add_subject_enroll.html', args, context)

class Subject_EnrollListView(ListView):
    """View to display all published and visible news entries."""


    template_name = "subject_enroll/subject_enroll_list.html"

    def get_queryset(self):

        return Subject_Enroll.objects.all()

class DetailViewMixin(object):
    """Mixin to handle different DetailView variations."""
    model = Subject_Enroll
    #slug_field = 'translations__slug'

    def get_queryset(self):

        #return Subject_Enroll.objects.all()
        return Subject_Enroll.objects.lang(self.request, False)


class Subject_EnrollDetailView(DetailViewMixin, DetailView):


    def get_context_data(self, **kwargs):
        context = super(Subject_EnrollDetailView, self).get_context_data(**kwargs)

        context['subject_enrolls'] = Subject_Enroll.objects.all() 
        return context

class Subject_EnrollUpdateView(UpdateView):
    form_class = Subject_EnrollForm
    model = Subject_Enroll
    template_name = 'subject_enroll/subject_enroll_detail.html'

    def get(self, request, **kwargs):
        self.object = Subject_Enroll.objects.get(id=self.request.id)
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        context = self.get_context_data(object=self.object, form=form)
        return self.render_to_response(context)

    def get_object(self, queryset=None):
        obj = Subject_Enroll.objects.get(id=self.kwargs['id'])
        return obj

我在Detilviewmixin的背景下尝试使用传递形式

class DetailViewMixin(object):
    """Mixin to handle different DetailView variations."""
    model = Subject_Enroll
    #slug_field = 'translations__slug'

    def get_context_data(self, **kwargs):
        context = super(DetailViewMixin, self).get_context_data(**kwargs)

        #context['form'] = Subject_EnrollForm
        #context['form'] = Subject_EnrollForm()
        return context





    def get_queryset(self):

        #return Subject_Enroll.objects.all()
        return Subject_Enroll.objects.lang(self.request, False)
该表单中的

是在模板上呈现,但是当我按下保存按钮以便它不能保存记录

从此代码中我获得" subject_enroll / subject_enroll_detail.html"中的所有字段访问权限。喜欢{{object.student_name}} {{object.enroll_status}}

因此它给出了该字段的值,但现在我想在subject_enroll_detail.html模板中编辑记录,如s subject_enroll values" draft"提交"提交"点击subject_enroll_detail.html模板中的一些按钮

我尝试使用表单视图和updateview但无法找到解决方案 请帮助!!! 在此先感谢!!

1 个答案:

答案 0 :(得分:0)

from django.views.generic import UpdateView
class StudentRegistrationUpdateView(UpdateView):
    model = StudentRegistration
    form_class = Subject_EnrollForm #don't need if you are editing all the fields
    template_name = 'subject_enroll/add_subject_enroll.html'

https://docs.djangoproject.com/en/1.7/ref/class-based-views/generic-editing/#updateview

在你的urls.py中

导入StudentRegistrationUpdateView

在urls.py中的

不要忘记包含'pk',如下所示,这决定了要更新的对象

url(r'student/(?P<pk>\d+)/update/$', StudentRegistrationUpdateView.as_view(), name='student_registration_update'),