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