Django ModelForms __init__ kwargs create and update

django

Solution

You have to pop the user argument before call super() so it will no conflict wit the default arguments of ModelForm

class DistListForm(ModelForm):
    members = ModelMultipleChoiceField(queryset=Company.objects.none())
    class Meta:
        model = DistList
        fields = ['name', 'description', 'members', 'is_private']

    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user', None)
        super(DistListForm, self).__init__(*args, **kwargs)
        user_profile = UserProfile.objects.get(user=user)

Problem

I'm trying to get the request.user into a ModelForm. I feel like I've tried all permutations of this from overloading the ``` __init__ ``` argument (per Django form, request.post and initial) to trying to pass it as a kwargs (per Django form __init__() got multiple values for keyword argument). I It does seem like the kwargs is the best approach but I'm totally stymied by it. Here's the ModelForm: ``` class DistListForm(ModelForm): members = ModelMultipleChoiceField(queryset=Company.objects.none()) class Meta: model = DistList fields = ['name', 'description', 'members', 'is_private'] def __init__(self, *args, **kwargs): super(DistListForm, self).__init__(*args, **kwargs) user = kwargs.pop('user', None) up = UserProfile.objects.get(user=user) /.. etc ../ ``` Here's how the create function currently works: ``` def distlistcreate(request): user = {'user': request.user} form = DistListForm(**user) if request.method == 'POST': form = DistListForm(request.POST) if form.is_valid(): distlist = form.save(commit=False) distlist.creator = request.user distlist.save() form.save_m2m() return HttpResponseRedirect(reverse('distlistsmy')) return render(request, 'distlistcreate.html',{'form':form}) ``` which throws a TypeError: init() got an unexpected keyword argument 'user'. The update method is equally unhelpful: ``` def distlistupdate(request, object_id): distlist = get_object_or_404(DistList, id=object_id) form = DistListForm(user=request.user, instance=distlist) if request.method == 'POST': form = DistListForm(request.POST, user=request.user) ``` It also throws the same error. I've been banging my head against this wall for two hours now. What is the correct way to pass a keyword argument into a ModelForm? This is Django 1.6.1 if that makes a difference.

Original source

Related problems