ApathyBear
ApathyBear

Reputation: 9595

Django: __init__() got an unexpected keyword argument 'instance'

I have the following form:

class locationForm(forms.Form):

    existing_regions= forms.ModelChoiceField(queryset=Region.objects.none(), label="Region Name", required=False)
    region_name = forms.CharField()
    location_name = forms.CharField()
    street_address = forms.CharField()
    city = forms.CharField()
    zip_code = forms.CharField()

And the following update view for this form:

class UpdateLocation(View):
    template_name = "dash/location_update_form.html"

    def get(self, request, *args, **kwargs):
        loc = kwargs['name']

        try:
            location = Location.objects.get(name=loc)
            form = locationForm(instance=location)

            return render(request, self.template_name, {'form': form,'location': location})

        except (ValueError, ObjectDoesNotExist):
            return redirect(reverse('geofence_manager'))


    def post(self, request, *args, **kwargs):
        loc = self.kwargs['name']
        try:
            location = Location.objects.get(name=loc)
            form = locationForm (request.POST, instance=location)
            if form.is_valid():
                form.save()
            else:
                form = locationForm(request.POST, instance=location)
                return render(request, self.template_name, {'location': location, 'form': form})

        except (ValueError, ObjextDoesNotExist):
            return redirect(reverse('location_manager'))
        return redirect(reverse('location_manager'))

I am receiving an error in regards to 'instance' key word argument being used. I believe this has something to do with me not using a Modelform(I could be wrong). But I do not want to use a Modelform to construct my form, so is there a way I can get around this?

Upvotes: 0

Views: 9185

Answers (1)

simopopov
simopopov

Reputation: 852

class locationForm(ModelForm):
    class Meta:
        model = Location
        fields = '__all__'

in your view:

...
locationForm.base_fields['existing_regions'] = forms.ModelChoiceField(queryset= ...)
form = locationForm()

Upvotes: 4

Related Questions