3

プロジェクトのフォームからいくつかのファイルをアップロードし、ファイルをディスクに保存しようとしています。現在、DB に挿入するデータを取得できます ( postgreSQL) が、データがディスクに書き込まれません。私は周りを見回しましたが、 a を使用しmodelformて呼び出すsaveことですべてが処理されるはずです (しかし、どうやら何かを見逃していたようです)。どんな助けでも大歓迎です。

これが私のコードです: views.py(仕事に関連するファイルをアップロードするため)

# Upload files to a Job (Developer)
@login_required()
@user_passes_test(lambda u: u.groups.filter(name='Developer').exists(), login_url='/login/', redirect_field_name='not allowed')
@require_http_methods(['POST'])
def job_file_upload(request, jobid):

    # Get the Job
    job = Jobs.objects.get(id=jobid)
    fileform = JobFileSubmitForm(request.POST, request.FILES)
    if fileform.is_valid():
        jfs = fileform.save(commit=False)
        file = request.FILES['file']
        jfs.user_id = request.user.id
        jfs.job_id = jobid
        jfs.file = file.name
        jfs.uploadDate = datetime.now()
        # Save to DB
        jfs.save()

        return redirect('view_job', jobid=jobid, slug=job.slug)

models.py (ファイルデータを保持するためのDBと正しいパスへの保存を保持するためのDB)

from django.core.files.storage import FileSystemStorage

fs = FileSystemStorage(location='/media/')

...


def upload_job_file_path(instance, filename):
    return os.path.join('/uploads/job_meta/files/', instance.id, filename)


# Submit Files for a Job (Developer Role)
class JobFileSubmit(models.Model):
    job = models.ForeignKey(Jobs)
    user = models.ForeignKey(User)
    file = models.FileField(storage=fs, upload_to=upload_job_file_path, blank=False, null=False)
    uploadDate = models.DateTimeField(auto_now=True)

フォーム.py

class JobFileSubmitForm(forms.ModelForm):

    class Meta:
        model = JobFileSubmit
        fields = 'file',

    def save(self, commit=True):
        jobfilesubmit = super(JobFileSubmitForm, self).save(commit=False)

        if commit:
            jobfilesubmit.save()
        return jobfilesubmit

view.html

                            <form method="post" action="/job/job_file_upload/j{{ job.id }}/" class="form-inline btn-group" enctype="multipart/form-data">
                                {% csrf_token %}
                                <div class="span6 inline">
                                    <label class="control-label">Attach Files: </label>{{ job_file_submit.file }}
                                    <p class="help-block">Attach files that go with this Job.</p>
                                </div>
                                <div class="modal-footer">
                                    <button type="submit" class="btn btn-success btn-med pull-left"><i class="fa fa-check-circle"></i> Attach Files</button>
                                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                                </div>
                            </form>

TL;DR: 現在、フォームは送信され、DB に挿入されますが、データはディスクと動的パスに書き込まれません。たとえば、データは次の場所に書き込まれません。

/media/uploads/job_meta/files/{{job.id}}/{{file.name}}

これを読んでくれてありがとう!どんな助けでも大歓迎です!

4

1 に答える 1