Как добавить новый экземпляр модели django с FileField от ModelForm? - PullRequest
4 голосов
/ 19 марта 2011

Я начинающий Джанго.Я думаю, что моя проблема тривиальна, но я не могу ее решить.У меня есть модель с именем Document с одним FileField:

class Document(models.Model):
    file = models.FileField(upload_to="documents")
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)
    category = models.ForeignKey(DocumentCategory)
    title = models.CharField(max_length=255, unique=True)
    description = models.TextField()

    def __unicode__(self):
        return self.title

Я хочу добавить новый экземпляр этого класса с помощью этой ModelForm:

class DocumentForm(ModelForm):
    class Meta:
        model = Document

В views.py у меня есть:

def add_document(request):
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/')
        else:
            return render_to_response('add_document.html', {'form':form}, context_instance=RequestContext(request))
    else:
        form = DocumentForm()
    return render_to_response('add_document.html', {'form':form}, context_instance=RequestContext(request))

Шаблон для этого (т.е. add_document.html):

{% extends "base.html" %}
{{block content %}
<form enctype="multipart/form-data" method="post" action="">{% csrf_token %}
{{form}}
<input type="submit" value="Add document" />
</form>
{% endblock %}

В интерфейсе администратора добавление модели в базу данных работает корректно, и добавленный файл находится в локализации upload_to.Моя форма не работает.Когда я пытаюсь отправить форму, я получаю в форме ошибки файла: «Это поле обязательно для заполнения!»Без FileField в модели это работает раньше.У меня Django 1.2.5 мучаюсь с ним 3 дня и ничего!Я в отчаянии.Извините за мой язык.Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 22 апреля 2013

В вашей модели документов ваш файл настроен на upload_t0 «документы», но где именно указано upload_to.

Может быть, это поможет.

0 голосов
/ 19 марта 2011

Как и сейчас, файл необходим. Вы пытаетесь сохранить форму без файла?
Если вы хотите сделать файл необязательным, вам нужно определить его следующим образом:

class Document(models.Model):
    file = models.FileField(upload_to="documents", blank=True, null=True)

Как дополнительное примечание, параметр действия, указанный в форме, может быть неверным.
Это должен быть URL; обычно в Django вы хотите поместить ".", но не полностью пустую строку (""). Тем не менее, я не знаю, может ли это быть проблемой или нет.

...