Q:

Persist Django FormView Data

I have a FormView that generates a review of an object (which it is generically related to) and then links it to the object and saves it when the form is completed. 
The issue I'm having is that I have no way to hold onto the data of the object I want to connect to.  This means that I need to 'look it up' for context (template rendering) for valid processing (to do the linking) and for the success (to generate an appropriately reversed url.  
Is there a better way to be binding the review to the object?  Or better yet, is there a way to persist form data that I'm missing? 
EDIT: Sorry the login decorator was on dispatch.  I removed that method because SO was complaining about too much code and I didn't think it was relevant... I must have missed the decoratot
class ReviewCreate(FormView):
    template_name = 'food/item_add_review.html'
    form_class = ReviewForm
    review_item = None

    def get_context_data(self, **kwargs):
        context = super(ReviewCreate, self).get_context_data(**kwargs)

        item_modelname = self.kwargs.get('model')
        item_model = apps.get_model('food',item_modelname)
        review_item = get_object_or_404(item_model,pk=self.kwargs.get('pk'))

        context['item'] = review_item

        return context

    def form_valid(self, form):
        item_modelname = self.kwargs.get('model')
        item_model = apps.get_model('food',item_modelname)
        review_item = get_object_or_404(item_model,pk=self.kwargs.get('pk'))

        r = form.save(commit=False)

        r.content_object=review_item
        r.save()

        return super(ReviewCreate, self).form_valid(form)

    def get_success_url(self): 
        item_modelname = self.kwargs.get('model')
        item_model = apps.get_model('food',item_modelname)
        review_item = get_object_or_404(item_model,pk=self.kwargs.get('pk'))

        return reverse( 'pkitem', kwargs = {'pk': review_item.id, 'model':item_modelname},)

A:

The view is an object right, so you just assign your values to instance variables, i e "to self" (this is thread-safe).  Like this:
class ReviewCreate(FormView):
    template_name = 'food/item_add_review.html'
    form_class = ReviewForm

    @method_decorator(login_required)  # Use a class level mixin instead
    def get_context_data(self, **kwargs):
        return super(
            ReviewCreate, 
            self
        ).get_context_data(
            item=self.review_item,
            **kwargs
        )

    def lookup_review_item(self):
        self.item_modelname = self.kwargs.get('model')
        item_model = apps.get_model('food', self.item_modelname)
        self.review_item = get_object_or_404(
            item_model, 
            pk=self.kwargs.get('pk')
        )

    def dispatch(self, request, *args, **kwargs):
        # lookup performed here to be set for both GET and POST
        self.lookup_review_item()
        return super(ReviewCreate, self).dispatch(request, *args, **kwargs)

    def form_valid(self, form):
        r = form.save(commit=False)
        r.content_object=self.review_item
        r.save()
        return super(ReviewCreate, self).form_valid(form)

    def get_success_url(self):
        return reverse(
            'pkitem', 
            kwargs = {
                'pk': self.review_item.id, 
                'model': self.item_modelname
            },
        )

