【问题标题】:Set value of field for Django ModelForm in CreateView在 CreateView 中设置 Django ModelForm 的字段值
【发布时间】:2014-08-19 04:37:41
【问题描述】:

我需要通过我的 ModelForm 的 CreateView 从我的 Django 模型中设置 BooleanField 的值。但是由于某种原因,在 form_valid() 中设置它不起作用。

这是我的模型:

class Feedback(models.Model):
    was_satisifed = models.BooleanField(
        help_text='Returns true if the user exits the process early.',
        default=False)

这是我的观点:

class FeedbackActionMixin(object):
    model = Feedback
    form_class = FeedbackForm

    def form_valid(self, form):
        instance = form.save(commit=False)
        instance.was_satisfied = True
        return super(FeedbackActionMixin, self).form_valid(form)

表单提交,但“was_satisfied”值保留为默认 False。我错过了什么?

【问题讨论】:

  • instance.save()instance.was_satisfied = True 之后呢?

标签: python django forms views modelform


【解决方案1】:

这就是我最终做的事情,虽然在forms.py 不是views.py

class SuccessfulFeedbackForm(FeedbackFormMixin, forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(SuccessfulFeedbackForm, self).__init__(*args, **kwargs)
        self.fields['was_satisifed'].initial = True


class UnsuccessfulFeedbackForm(FeedbackFormMixin, forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(UnsuccessfulFeedbackForm, self).__init__(*args, **kwargs)
        self.fields['was_satisifed'].initial = False

【讨论】:

    【解决方案2】:

    如果没有记错的话,form_valid 在数据已经发布后被调用。您可以尝试在您的 mixin 上覆盖 post 方法:

    class FeedbackActionMixin(object):
        model = Feedback
        form_class = FeedbackForm
    
        def post(self, request, *args, **kwargs):
            form_class = self.get_form_class()
            form = self.get_form(form_class)
    
            if form.is_valid():
                form.was_satisfied = True
                return self.form_valid(form)
            else:
                return self.form_invalid(form)
    

    【讨论】:

    • 不幸的是,我无法使用此方法。请参阅我的答案,了解我是如何解决的。
    猜你喜欢
    • 2011-10-16
    • 2013-12-29
    • 2017-11-13
    • 1970-01-01
    • 2018-11-19
    • 2013-01-03
    • 1970-01-01
    • 2011-03-17
    • 2018-08-21
    相关资源
    最近更新 更多