Hello, I'm trying to use a modified __init__ form method, but I am encountering the following error:
TypeError __init__() got multiple values for keyword argument 'vUserProfile' I need to pass UserProfile to my form, to get to dbname field, and I think this is a solution (my form code):
class ClienteForm(ModelForm): class Meta: model = Cliente def __init__(self, vUserProfile, *args, **kwargs): super(ClienteForm, self).__init__(*args, **kwargs) self.fields["idcidade"].queryset = Cidade.objects.using(vUserProfile.dbname).all() Calls to constructor ClienteForm() without POST are successful and show me the correct form. But when the form is submitted and the constructor is called with POST, I get the previously described error.
You've changed the signature of the form's __init__ method so that vUserProfile is the first argument. But here:
formPessoa = ClienteForm(request.POST, instance=cliente, vUserProfile=profile) you pass request.POST as the first argument - except that this will be interpreted as vUserProfile. And then you also try to pass vUserProfile as a keyword arg.
Really, you should avoid changing the method signature, and just get the new data from kwargs:
def __init__(self, *args, **kwargs): vUserProfile = kwargs.pop('vUserProfile', None)
For the help of those others who Google to here: the error comes from init picking up the argument from both a positional argument and the default argument. Daniel Roseman's is accurate for the question as asked.
This can be either:
You put the argument by position and then by keyword:
class C(): def __init__(self, arg): ... x = C(1, arg=2) # you passed arg twice! You forgot to put self as the first argument:
class C(): def __init__(arg): ... x = C(arg=1) # but a position argument (for self) is automatically # added by __new__()! If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With