Как написать соответствующий "handle_uploaded_file" для поля модели и формы? - PullRequest
1 голос
/ 06 августа 2011
attachment = models.FileField(upload_to='file/upload/question/%Y-%m-%d', verbose_name='attachment', null=True, blank=True,)

def handle_uploaded_file (file_, user):
    filename = "%s-%s" % (user.username , file_.name)
    path = "%s/file/upload/question/%s/%s" % (settings.MEDIA_ROOT, user.username, filename)
    if not os.path.exists (path): 
        os.makedirs(path)
    f = path + file.name
    fd = open(f, 'wb+')
    for chunk in file.chunks():
        fd.write(chunk)
    fd.close()

Я не знаю, как написать путь и следующий код?

def submit_question(request):
    current_user = request.user
    url = '/question/list_questions/'

    if request.method == 'POST':
        form = QuestionForm(request.POST, request.FILES)
        if form.is_valid():
            handle_uploaded_file(request.FILES['attachment'], current_user)  

            new_question = Question(question = form.cleaned_data['question'],
                                    question_type= form.cleaned_data['question_type'],
                                    country = form.cleaned_data['country'], 
                                    submitter = form.cleaned_data['submitter'],
                                    is_private = form.cleaned_data['is_private'],
                                    #attachment = temp_attachment,
                                    )
            new_question.save()

            return HttpResponseRedirect(url)
    else:
        form = QuestionForm()

    context = {'form': form,}
    context.update(csrf(request))
    return render_to_response('question/submit.html', context)

1 Ответ

2 голосов
/ 06 августа 2011

Почему вы хотите обрабатывать файловые вложения самостоятельно, django сделает это за вас.

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

Сначала создайте свою форму из связанной модели:

class SomeFormWithFileForm(forms.ModelForm):
class Meta:
    model = SomeModel

, затем вваш взгляд, где вы создаете свой экземпляр формы,

form = SomeFormWithFileForm(request.POST, request.FILES)
if form.is_valid():
    form.save()

сделает свое дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...