【问题标题】:ModelForm does not like receiving an instanceModelForm 不喜欢接收实例
【发布时间】:2013-07-21 04:14:02
【问题描述】:

我想要做的是使用 Django 表单更新 Dog 模型中的现有行,但我遇到了一个错误。

我收到此错误:

__init__() got multiple values for keyword argument 'user'

因为django认为这里有问题:

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 是:

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

我最初被困在使用 modelForm 传递 request.user Access request.user in modelForm

如果有人能解决这个问题,我会非常高兴!

【问题讨论】:

    标签: python django modelform


    【解决方案1】:

    您将 request.POST 作为位置参数用户传递,request.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)
    

    【讨论】:

    • @AlexStewart,不客气。我犯了很多次这个错误;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 2022-08-03
    • 2022-12-13
    相关资源
    最近更新 更多