Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python FileField不上载文件_Python_Django - Fatal编程技术网

Python FileField不上载文件

Python FileField不上载文件,python,django,Python,Django,请给我任何建议。我真的会感激一切。 每当我使用基于django的web应用程序成功地通过上传字段的整个流程时,实际上什么都没有发生。正确的记录被插入到数据库中,但其自身的文件不会复制到服务器的文件系统中 models.py from django.db import models from django.forms import ModelForm from .choices import * from .validators import validateExtensionOfTheFile

请给我任何建议。我真的会感激一切。 每当我使用基于django的web应用程序成功地通过上传字段的整个流程时,实际上什么都没有发生。正确的记录被插入到数据库中,但其自身的文件不会复制到服务器的文件系统中

models.py

from django.db import models
from django.forms import ModelForm
from .choices import *
from .validators import validateExtensionOfTheFile
from django.contrib.auth.models import User

class MusicFile(models.Model):
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=50)
    image = models.FileField(upload_to="music_images/%Y/%m/%d", null=True, blank=True, validators=[validateExtensionOfTheFile])
forms.py

from django import forms
from .choices import *
from .models import MusicFile

class MusicFileForm(forms.ModelForm):
    class Meta:
        model = MusicFile
        fields = '__all__'
        exclude = ('owner')

    def __init__(self, *args, **kwargs):
        super(MusicFileForm, self).__init__(*args, **kwargs)
        self.fields['image'].required = False
views.py

@login_required
def new_upload(request):
    if request.method == 'POST':
        form = MusicFileForm(request.POST, request.FILES)
        if form.is_valid():
            post = form.save(commit=False)
            post.owner = User.objects.get(username=request.user.username)
            post.save()
            return HttpResponseRedirect('/success/confirmed/')
    else:
        form = MusicFileForm()
    return render(request, 'new_upload.html', {'form': form})
new_upload.html

{% extends 'base.html' %}

{% block content %}
<form enctype="multipart/form-data" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit" class="btn btn-primary btn-block">Save</button>
</form>
{% endblock %}
url.py

urlpatterns = [...
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
@编辑
最近对代码做了一些修改,但仍然不能正常工作。 无论如何,我已经考虑了发送到服务器的POST请求。 其制定方式如下:

csrfmiddlewaretoken=qDI7hZCzJYkqDSDnCCw3v3dG274Xb1NiYGWAMZhjgZxe4G3TXtY6EUmgtvjYLwOF&title=asdasd&image=Stromae+-+Alors+On+Danse+%28Dubdogz+Remix%29+%28Bass+Boosted%29.jpg
我不确定这一条是否正确。
我不应该以多部分/表单数据的形式出现吗?

我不明白为什么它在您的fbv中不起作用,但您可以尝试使用基于类的视图:

class UploadMusicFile(LoginRequiredMixin, CreateView):
    model = MusicFile
    success_url = '/success/confirmed/'
    template_name = 'new_upload.html'
    form_class = MusicFileForm

    def form_valid(self, form):
        form.instance.owner = self.request.user
        return super(UploadMusicFile, self).form_valid(form)

我引用了错误的模板名称。在配置urlpatterns的过程中出现了错误。
感谢所有在这个问题上花费时间的人。

您也可以发布模板吗?很抱歉没有这样做。刚刚发布的itcsrf_代币必须在表格中,啊,我看到你把它放了两次,嗯,好的。我也看到了:)@edit实际上已经更改了它,但结果是一样的:/n我在你的模板中引用了,csrf_令牌应该一直在里面,但我没有看到你两次编写它,最近对代码做了提到的更改。请参阅主帖子中的@edit
class UploadMusicFile(LoginRequiredMixin, CreateView):
    model = MusicFile
    success_url = '/success/confirmed/'
    template_name = 'new_upload.html'
    form_class = MusicFileForm

    def form_valid(self, form):
        form.instance.owner = self.request.user
        return super(UploadMusicFile, self).form_valid(form)