我的表单没有保存我需要它的模型.我的表格:
class RewardForm(forms.Form): quantity = forms.IntegerField(max_value=10, min_value=1, label=_('quantity'), initial=1) reward = forms.CharField(max_length=50, label=_('reward')) reward_denomination = forms.ModelChoiceField(queryset=Reward_Denomination.objects.all(), widget=forms.RadioSelect) def clean_reward(self): data = self.cleaned_data.get('reward') try: reward = Reward.objects.get(reward_name=data) except ObjectDoesNotExist: raise forms.ValidationError(_('Reward does not exist'), code='invalid') return data def clean_reward_denomination(self): data = self.cleaned_data.get('reward_denomination') try: denomination = Reward_Denomination.objects.get(denomination=data) except ObjectDoesNotExist: raise forms.ValidationError(_('Denomination does not exist'), code='invalid') return data def save(self, request, commit=True): user = request.user data = self.cleaned_data 'try: post_reward = data['reward'] post_denomination = data['reward_denomination'] quantity = data['quantity'] except LookupError: raise Http404 reward = Reward.objects.get(reward_name=post_reward) denomination = Reward_Denomination.objects.get(denomination=post_denomination) user_points = Points.objects.filter(affiliate__id=user.id).aggregate(total_points=Sum('points')) user_points = user_points['total_points'] try: total_cost = (quantity * denomination.cost) except ArithmeticError: raise Http404 quote_price = -total_cost if user_points >= total_cost: reward_order = Points.objects.create(affiliate=user, points=quote_price, from_reward=True, from_offer=False) status_coded = Status_Code.objects.create(short_name="Pending", name="The order is currently being reviewed", description="The order is in queue") redeem_order = Redeem.objects.create(affiliate=user, status_code=status_coded, quantity=quantity, reward=reward, price=total_cost) return reward_order
我的观点:
class Reward_Detail(DetailView): model = Reward slug_field = 'reward_slug' context_object_name = 'reward' template_name = 'omninectar/reward.html' #Detail Stuff class RedeemReward(SingleObjectMixin, FormView): template_name = 'omninectar/reward.html' slug_field = 'reward_slug' form_class = RewardForm model = Reward def post(self, request, *args, **kwargs): self.object = self.get_object() return super(RedeemReward, self).post(request, *args, **kwargs) def get_success_url(self): return reverse('omni:reward_confirmation') class RewardBeautify(View): def get(self, request, *args, **kwargs): view = Reward_Detail.as_view() return view(request, *args, **kwargs) def post(self, request, *args, **kwargs): view = RedeemReward.as_view() return view(request, *args, **kwargs)
所以我最初认为FormView将处理表单处理(验证,如果有效,则运行form.save()等).我正在关注Django网站上的FormView,SingleObjectMixin示例.我尝试提交表单时没有收到任何错误,但也没有创建任何对象.我已经尝试定义一个运行save方法的form_valid方法,我已经尝试将它放在formview中的post方法中,等等.有人能发现错误/错误吗?谢谢!
我也是新手来查看类,我和Django 1.6几乎有同样的问题.
你应该添加
def form_valid(self, form): form.save() return super(RedeemReward, self).form_valid(form)
方法覆盖你的RedeemReward
班级.这对我有用.
如果您查看Django源代码,您将看到FormView
类继承链中没有表单保存.