Django如何在基于类的视图中提交和处理表单数据

时间:2015-08-19 05:59:39

标签: django django-forms django-views

有人可以告诉我如何使用基于类的视图处理表单提交和字段。 这是我的views.py

class ProfileView(FormView):
    template_name='profile.html'
    form_class = UnregisterMealForm
    context={}
    @method_decorator(login_required)
    def form_valid(self, form):

        return HttpResponse("You have succesfully unregistered for the meal")
    def form_invalid(self, form):
        return self.render_to_response(self.get_context_data(form=form))

    def dispatch(self,*args, **kwargs ):

        if self.request.user.is_active:

            context = super(ProfileView, self).dispatch( self.request, *args, **kwargs)

            return context                
        else:        
            return HttpResponseRedirect('%s?next=%s' % (settings.LOGIN_URL, self.request.path))
    def get_context_data( self, **kwargs):
            form=UnregisterMealForm(self.request.POST)
            meals = ['breakfast','lunch','dinner']
            context = {'meals' : meals , 'unregisterform': form}

            if form.is_valid():
                select_date = request.POST['select_date']
                select_meal = request.POST['meal']
                context['recent'] = "You have succesfully unregistered    for "+ select_meal +" on " + select_date 

        return context

当我提交表单时,它会显示错误Attribute Error 'UnregisterMealForm' object has no attribute 'user'

这是我的UnregisterMealForm

class UnregisterMealForm(forms.Form):
    MEALS = [('breakfast','breakfast'),('lunch','lunch'), ('dinner','dinner')]
    select_date = forms.DateField(widget=DateInput())
    meal = forms.CharField(widget=forms.Select(choices=MEALS, attrs={'class':'form-control', 'placehoder':'Choose the Meal' }))

任何人都可以帮助我。如果您需要更多信息,请告诉我。

提前致谢。 我是django的新手。

1 个答案:

答案 0 :(得分:1)

您可以在form_valid方法中保存对象:

def form_valid(self, form):
    model = YourModel()
    model.select_date = form.cleaned_data['select_date']
    model.select_meal = form.cleaned_data['meal']
    model.save()
    messages.success(request, "Your message here")