上载的文件未存储在Django的数据库中

时间:2018-07-09 07:30:35

标签: python-3.x django-models django-views

我正在尝试制作一种表格,其中银行每月上传一个文件,但是我的代码已完全运行,并带有所有成功警报,但是数据库中没有存储任何内容,媒体文件夹中也没有存储文件。

>
  

我的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有点新,所以请任何人帮助我

1 个答案:

答案 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'))