簡體   English   中英

Django int()參數必須是字符串或數字

[英]Django int() argument must be a string or a number

我有一個顯示表單並保存相同表單的視圖。 第一次顯示視圖時,我沒有錯誤。 但是,當保存(發布)到視圖時,出現以下錯誤:

/ test6 / settings / int()參數處的TypeError必須是字符串或數字,而不是'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上,但是我已經嘗試了不同的方法而沒有解決。

查看如何重寫表單的__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...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM