簡體   English   中英

TypeError: __init__() 得到了一個意外的關鍵字參數“文件”

[英]TypeError: __init__() got an unexpected keyword argument 'file'

我正在使用 Django 開發一個用戶可以上傳文件的平台。 此功能可以正常工作幾個月沒有問題,但由於某種原因,現在我在嘗試上傳文件時收到此錯誤:

追溯:

Traceback (most recent call last):
  File "/home/me/.local/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/home/me/.local/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/me/project/app/views.py", line 314, in invoke_local
    instance = SingleEndForm(file=request.FILES['file'])

Exception Type: TypeError at /invoke_local/
Exception Value: __init__() got an unexpected keyword argument 'file'

我的模型:

class SingleEnd(models.Model):

    file = models.FileField(upload_to="documents/")
    email = models.CharField(max_length=100)

    def __str__(self):
        return self.email

我的表格:

class SingleEndForm(forms.ModelForm):
    class Meta:
        # shows which model to use from models.py
        model = SingleEnd
        # fields = '__all__'
        fields = ["file", "email"]

        labels = {
            "file": "input your fasta/fastq file (min 3 sequences)",
            "email": "input your email to get a notification for your results in a timely manner",
        }
        widgets = {
            "email": forms.EmailInput(attrs={"class": "form-control"}),
            "file": forms.FileInput(attrs={"class": "form-control"}),
        }

我的觀點:

def invoke_local(request):
    # path to save inputs
    media_path = "/home/me/project/media/documents/"
    # path to save outputs
    result_path = "/home/me/project/media/results"
   
    if request.method == "POST":
        # use the form to upload form info (post) and files
        form = SingleEndForm(request.POST, request.FILES)
        if form.is_valid():
            # saves full form
            instance = SingleEndForm(file=request.FILES['file'])
            instance.save()

            # changes file name if the name is the same
            file_name_final = instance.file.name[10:]
            # final path
            file_path = media_path + file_name_final
    else:
        raise Http404("Form not entered correctly")
form = SingleEndForm()
return render(request, "invoke_local.html", {"form": form})

我真的不明白我做錯了什么。

基於文檔中的示例使用模型處理上傳的文件,您混合了兩種不同的方法,這會產生問題

可以直接寫Form

form = SingleEndForm(request.POST, request.FILES)
if form.is_valid():
    # saves full form
    form.save()

或者您必須創建模型SingleEnd的實例而不是表單SingleEndForm

form = SingleEndForm(request.POST, request.FILES)
if form.is_valid():
    # use model 
    instance = SingleEnd(file=request.FILES['file'])
    instance.save()

(但是您使用表單SingleEndForm這會產生問題)

暫無
暫無

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

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