Загрузка файла Django для каждого пользователя

#python-3.x #django #django-models #django-forms #django-views

#python-3.x #django #django-модели #django-формы #django-просмотры

Вопрос:

Я пытаюсь создать форму, которая будет загружать файл для каждого пользователя, и мне нужно установить имена файлов по умолчанию id или что-то в этом роде.

например, если 2 пользователя будут загружать резюме с одинаковым именем ‘sampleCV.pdf’, мне нужно, чтобы они были в отдельных файлах, по идентификатору или чему-то еще, я пытался использовать self.name при загрузке, но это не сработало, потому что на данный момент self все еще не распознан..

Есть ли способ по умолчанию задать имя для загрузки файла?

Модель

 class Candidate(models.Model):
name = models.CharField(max_length=200, null=True)
...
candidate_cv = models.FileField(upload_to=f'uploads/',null=True)
...
  

Форма:

 class CandidateForm(ModelForm):
    class Meta:
        model = Candidate
        fields = '__all__'
  

Вид:

 @login_required(login_url='login')
def create_candidate(request):
    form = CandidateForm()
    if request.method == 'POST':
        form = CandidateForm(request.POST,request.FILES)
        if form.is_valid():
            form.save()
    context = {'form': form}

    return render(request, 'dashboard/form.html', context)
  

Форма HTML:

 {% block content %}
    <center>
        <hr>
        <form enctype="multipart/form-data" action="" method="POST">
            {% csrf_token %}
            {{form.as_p}}
            <input class='btn btn-sm btn-danger' type="submit" name="Submit">
        </form>
        <hr>
    </center>
    {% endblock %}
  

Ответ №1:

Нашел простой способ сделать это! Для кого это может касаться:

 def create_candidate(request):
    form = CandidateForm()
    if request.method == 'POST':
        form = CandidateForm(request.POST, request.FILES)
        print(request.FILES['candidate_video'].name) # previous name
        request.FILES['candidate_video'].name = 'new_name.pdf' # setting a new file name
        print(request.FILES['candidate_video'].name) # new name
        if form.is_valid():
            form.save()
    context = {'form': form}