Django: How to set a hidden field on a generic create view?

django, django-generic-views

Solution

You can do it that way:

- get user from request object.

- overwrite form_valid method on your UserProfileCreateView class,

- attach user to form instance and save it.

class UserProfileCreateView(CreateView):
    model = UserProfile
    fields = ['height']

     def form_valid(self, form):
         user = self.request.user
         form.instance.user = user
         return super(UserProfileCreateView, self).form_valid(form)

This code is for Python 2.7.x

Problem

I'm running Django 1.6.x To extend my user I've added another model storing the data: ``` class UserProfile (models.Model): user = models.ForeignKey(User) height = models.IntegerField(blank=True, null=True) ``` Now I wand to add a view, which is allowing the user to add its own infos there. Started with `django.views.generic.edit.CreateView`, but want also to provide at least the edit/update one to. So I've added the import and created a view: ``` from django.views.generic.edit import CreateView, UpdateView # .... class UserProfileCreateView(CreateView): model = UserProfile fields = ['height'] ``` Also I've added the entry inside urls.py: ``` url(r'^userprofile/new/$', login_required(UserProfileCreateView.as_view()), name="add_userprofile") ``` But now I'm stuck on the point how to assign the user ID in the correct way. I want to have this field set in background. Any hints?

Original source