2013-07-16 115 views
0

我有一个显示窗体并保存相同窗体的视图。首次显示视图时,我没有任何错误。然而,保存(发布)到视图我收到以下错误时:在/ TEST6 /设置/ int()函数的参数Django int()参数必须是字符串或数字

类型错误必须是一个字符串或数字,而不是“的QueryDict”

查看

@login_required 
def keyword_settings(request, keyword): 
    keyword = Keyword.objects.get(keyword=keyword, status="Active") 

    # If we had a POST then get the request post values. 
    if request.method == 'POST': 
    # Populate the form with the instance. 
     form = KeywordFrom(request.POST, instance=keyword) 
     # Check we have valid data before saving trying to save. 
     if form.is_valid(): 
      form.save() 

    form = KeywordFrom(instance=keyword, user=request.user) 
    context = {'form': form} 
    return render_to_response('sms/keyword_settings.html', context, context_instance=RequestContext(request)) 

class KeywordFrom(forms.ModelForm): 

    def __init__(self, user=None, *args, **kwargs): 
     """ 
     Init method. 
     """ 
     super(KeywordFrom, self).__init__(*args, **kwargs) 
     if user is not None: 
      this_originator_name = Originator.objects.for_user(user) 
      self.fields['sender_name'] = forms.ModelChoiceField(queryset=this_originator_name) 

    class Meta: 
     model = Keyword 

我知道问题出在SENDER_NAME,但我都试过,没有解决不同的事情。

+1

为什么不合理?你能解释一下吗?感谢 – GrantU

回答

7

看看你是如何重写表单的__init__方法:

def __init__(self, user=None, *args, **kwargs): 

所以第一个明确的参数(隐式self后)user

现在来看看你怎么在POST块实例的形式:

form = KeywordFrom(request.POST, instance=keyword) 

所以你传递的第一个参数是POST。但是形式在该位置期待user,并把你传进去的还有成变量。

你需要传递,当你实例化POST,这将解决该问题的用户。但是,这表明为什么它是一个坏主意,勾搭一类的默认签名。你真的应该保留签名,并采取userkwargs

def __init__(self, *args, **kwargs): 
    user = kwargs.pop('user', None) 
    super(KeywordFrom, self).__init__(*args, **kwargs) 
    ...etc... 
+0

我认为这是问题,我已经看过从未说过这是一个坏主意寿的所有例子;)感谢您的信息我现在理解这个概念清楚你的答案。 – GrantU

相关问题