我们如何通过 Class 基于 Django 中的通用视图保存表单

how we save form through Class Based Generic View in django

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

我的 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 的上下文中使用 pass 表单

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 值 "draft" 到 "submit" 单击 subject_enroll_detail.html 模板中的一些按钮

我尝试了表单视图和更新视图,但找不到解决方案 请帮助! 提前致谢!!

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'),