简体   繁体   中英

Set value of field for Django ModelForm in CreateView

I need to set the value of a BooleanField from my Django model via the CreateView for my ModelForm. But for some reason, setting it in form_valid() isn't working.

Here's my model:

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

Here's my view:

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)

The form submits, but the "was_satisfied" value is left at the default False. What am I missing?

If memory serves, form_valid is called after the data has already been posted. You might try overriding the post method on your mixin:

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)

Here's what I ended up doing, though in forms.py not 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM