I have a User defined, partly, as so:
class User(AbstractBaseUser):
    ...
    email = models.EmailField(unique=True)
    type = models.IntegerField(choices=STATUS_CHOICES)
    verified = models.BooleanField(default=False)
    created_date = models.DateTimeField(default=timezone.now)
    USERNAME_FIELD = 'email'
...
A user can either be a Freelancer or a Client. Take Freelancer as an example:
class Freelancer(models.Model):
    user = models.ForeignKey(User)
    first_name = models.CharField(max_length=128)
    ...
I've created a form for a user to register. When I register I get the type of user they selected and create a record in the appropriate table:
if form.is_valid():
            user = form.save(commit=False)
            user.set_password(user.password)
            user.save()
            # create subgroup based on user type
            if user.type == 1:
                fl = Freelancer(user=user)
                fl.save()
So now I have a User and a Freelancer linked to that user and now I wish to let the user be able to edit all their details:
class Profile(UpdateView):
    model = User
    form_class = UserUpdateForm
    second_form_class = FreelanceUpdateForm
    template_name = "freelancestudent/profile.html"
    def get_queryset(self):
        queryset = super(Profile, self).get_queryset()
        if not self.request.user.is_authenticated():
            return queryset.none()
        else:
            return queryset.filter(pk=self.request.user.pk)
    def get_context_data(self, **kwargs):
            context = super(Profile, self).get_context_data(**kwargs)
            context['form'] = self.form_class(self.request.GET, instance=self.request.user)
            context['form2'] = self.second_form_class(self.request.GET, instance=self.request.user)
            return context
    def get(self, request, *args, **kwargs):
        super(Profile, self).get(request, *args, **kwargs)
        form = self.form_class
        form2 = self.second_form_class
        return self.render_to_response(self.get_context_data(
            object=self.object, form=form, form2=form2))
The forms look like this:
class UserUpdateForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('email',)
class FreelanceUpdateForm(forms.ModelForm):
    class Meta:
        model = Freelancer
        fields = ('university',)
The problem is it won't populate the data with existing data. I looked at this which led me to the instance=self.request.user idea and as I debug I can see it does get that instance of a user but no population. Why is this?