2014-11-28 2 views
0

У меня есть следующий вид:Джанго: __init __() получил неожиданное ключевое слово аргумент «экземпляр»

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() 

И следующий вид обновления для этой формы:

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')) 

Я получаю сообщение об ошибке в отношении используемого аргумента ключевого слова «instance». Я считаю, что это имеет отношение ко мне, не используя Modelform (я мог ошибаться). Но я не хочу использовать Modelform для создания моей формы, так же как я могу обойти это?

+0

Почему вы пытаетесь передать модель к нему? –

+0

Я пытаюсь сделать представление обновления, которое будет отображать данные из экземпляра, с которым он связан. Есть лучший способ сделать это? – ApathyBear

+0

За исключением использования 'ModelForm'? –

ответ

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

на ваш взгляд:

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

Hi Simeon, Можете ли вы указать на объяснение, почему это должно быть в представлении, а не в определении формы? Я получаю KeyError со значением исключения «manager» при попытке запустить набор запросов в файле forms.py. Ваше решение здесь работало для новых форм, но если я попытаюсь установить начальное состояние поля ModelMultipleChoice, то возвращается KeyError. – mattsl

Смежные вопросы