我正在尝试制作一种表格,其中银行每月上传一个文件,但是我的代码已完全运行,并带有所有成功警报,但是数据库中没有存储任何内容,媒体文件夹中也没有存储文件。
>我的models.py文件
from django.db import models
from django.contrib.auth import get_user_model
from datetime import datetime
# Create your models here.
class BusinessAccount(models.Model):
user = models.OneToOneField(
get_user_model(),
on_delete=models.CASCADE,
primary_key=True,
)
def __str__(self):
return self.user.first_name
def user_directory_path(instance, filename):
user = instance.user.user.first_name
current_month = (datetime.now()).strftime("%B")
return 'CIR/{0}/{1}/{2}'.format(user, current_month, filename)
class UploadFile(models.Model):
user = models.ForeignKey(
BusinessAccount,
on_delete=models.CASCADE,
)
month = models.DateField()
cir = models.FileField(null = False, upload_to=user_directory_path)
def __str__(self):
return self.user.user.first_name
我的views.py文件
@login_required
def upload(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES, instance=user)
if form.is_valid():
file = form.save(commit=False)
if 'cir' in request.FILES:
file.cir = request.FILES['cir']
print(file.cir)
file.save()
messages.success(request,('File is sucessfully uploaded'))
return HttpResponseRedirect(reverse('business:upload'))
else:
messages.error(request,('Please upload a valid file!'))
else:
print(form.errors)
messages.error(request,(form.errors))
else:
form = UploadFileForm()
return render(request,'upload.html',{'form': form})
我的forms.py文件
class UploadFileForm(forms.ModelForm):
cir = forms.FileField(widget=forms.FileInput(attrs={'class':'form-control-file'}))
class Meta:
model = UploadFile
fields = ('cir',)
和我的模板
<!DOCTYPE html>
{% extends "base.html" %}
{% block body_block %}
<div class="container">
<div class="jumbotron jumbotron-fluid">
{% for message in messages %}
<div class="alert alert-success">
<a class="close" href="{% url 'personal:profile_form' %}" data-dismiss="alert">×</a>
{{ message }}
</div>
{% endfor %}
<form role="form" enctype="multipart/form-data" method="POST">
{% csrf_token %}
<div class="form-group">
<label for="exampleFormControlFile1"><h1>Upload This Month's CIR</h1></label>
{{form.cir}}
</div>
<button type="submit" class="btn btn-success">Upload</button>
</form>
</div>
</div>
{% endblock %}
我在django有点新,所以请任何人帮助我
答案 0 :(得分:0)
删除形式实例化中的instance=user
参数,因为要保存的实例不是用户。另外,您还应该在UploadFile
实例上手动设置用户和月份:
form = UploadFileForm(request.POST, request.FILES) # there is no instance yet!
if form.is_valid():
file = form.save(commit=False) # the file should be there now anyway
file.user = request.user
file.month = timezone.now() # django.utils.timezone
file.save()
messages.success(request,('File is sucessfully uploaded'))
return HttpResponseRedirect(reverse('business:upload'))