2013-07-21 2 views
0

내가하려는 것은 장고 양식을 사용하여 Dog 모델의 기존 행을 업데이트하는 것이지만 오류가 발생합니다.ModelForm이 인스턴스 수신을 좋아하지 않습니다.

form = DogImageForm(request.POST, request.FILES, user=request.user, instance=instance) 

내 model.py이

class DogImageForm(ModelForm): 
    dogs = forms.ModelChoiceField(queryset=Dog.objects.none()) 
    class Meta: 
     model = Dog 
     fields = ['dogs','image'] 

    def __init__(self, user, *args, **kwargs): 
     super(DogImageForm, self).__init__(*args, **kwargs) 
     userprofile = UserProfile.objects.get(user=user) 
     self.fields['dogs'].queryset = Dog.objects.filter(user=userprofile) 

그리고 내 view.py입니다 :

는 장고가 여기에 문제가있다 생각
__init__() got multiple values for keyword argument 'user' 

때문에 :

이 오류를 얻고있다 is :

def dog_image_upload(request): 
    if request.user.is_authenticated(): 
     if request.method == 'POST': 

      userprofile = UserProfile.objects.get(user=request.user) 
      instance = Dog.objects.get(id=str(request.POST['dogs']))#user=userprofile, 

      form = DogImageForm(request.POST, request.FILES, user=request.user, instance=instance) 
      if form.is_valid(): 
       form.save() 
       reader = csv.reader(request.FILES['file']) 
       return HttpResponseRedirect('/members-dogs/') 
     else: 
      form = DogImageForm(user=request.user) 
     return render_to_response("dog-image-upload.html", {'form': form}, context_instance=RequestContext(request)) 
    else: 
     return HttpResponseRedirect('/') 

나는 원래 사람이 내가 슈퍼 드리겠습니다 고정에 대한 해결책이있는 경우 여기 Access request.user in modelForm

을 modelForm를 사용하여 request.user 전달에 붙어 있었다!

답변

1

당신은 request.POST를 위치 인수 user로, request.user를 키워드 인수 user로 전달합니다. 당신은 다음과 같이 뭔가를하고있어 :

>>> def f(user, *args, **kwargs): pass 
... 
>>> f('post', user='user') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: f() got multiple values for keyword argument 'user' 
>>> f('user', 'post') 

대신 다음을 수행하십시오

form = DogImageForm(request.user, request.POST, request.FILES, instance=instance) 
+0

덕분에 그 일을 @falsetru! –

+1

@AlexStewart, 오신 것을 환영합니다. 나는 그 실수를 여러 번했다.) – falsetru

관련 문제