【问题标题】:save() got multiple values for keyword argumentsave() 为关键字参数获取多个值
【发布时间】:2014-03-10 05:59:35
【问题描述】:

我正在尝试使用 django 表单中的保存方法。我将 2 个其他参数传递给保存 - 用户 ID 和产品 ID,但我收到以下错误:

TypeError at /kinect-xbox-360/review_submit/
save() got multiple values for keyword argument 'uid'

这是我的保存方法:

class ReviewForm(ModelForm):
        class Meta:
                model = Review        
                fields = ('review_text','tag')

        tag = forms.CharField(widget = forms.TextInput(attrs={'placeholder': 'teste'}), label='Descreva este produto em 1 palavra', help_text = 'separe as palavras por vírgulas')
        review_text = forms.CharField(widget = forms.Textarea(attrs={'cols':150,'rows':5}), label='O que você achou deste produto?', min_length=50, max_length=2000)

    def save(uid, product, self, commit=True):
            # save the response object
            response = super(ReviewForm, self).save(commit=False)
            #print(self.cleaned_data['review_text'])
            #response.survey = self.survey
            #user = uid
            tag = self.cleaned_data['tag']
            product = product
            review_text = self.cleaned_data['review_text']
            #created
            #updated 


            response.save()

            return response

这是处理 POST 响应的视图:

u = User.objects.get(username=reviews.user)
prod = Product.objects.get(slug=slug)
if request.method=="POST":
        form = ReviewForm(request.POST)

        if form.is_valid():
            response = form.save(uid=u.id, product=prod.id)
            msg = 'Obrigado por avaliar ' + prod.name
        else:
            msg = 'Houve algum erro no servidor :('
        return render(request, 'product_detail.html', {'prod':prod, 'reviews':reviews, 'user':u.first_name, 'msg':msg})    
    else:    
        form = ReviewForm()    
        args = {}
        args.update(csrf(request))
    return render(request, 'product_detail.html', {'prod':prod, 'reviews':reviews, 'user':u.first_name, 'form':form})   

【问题讨论】:

  • 只是一个问题,为什么self不是save中的第一个参数?
  • 因为我正在使用特定的参数 - uid 和 product - 这不是通常用于保存的。如果我把这两个放在最后,django会返回一个错误

标签: django django-forms django-views


【解决方案1】:

Paulo 在 cmets 中走在正确的轨道上。 self 必须是方法定义中的第一个参数。你不能像那样随意地重新排序参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2017-07-14
    • 2010-12-28
    • 2013-08-04
    • 2016-06-24
    • 2015-05-18
    • 2013-03-09
    相关资源
    最近更新 更多