2010-12-02 2 views
1

У меня есть модель, которая не создает (некоторые из) HTML, которые (должны) представляют поля модели. Как вы можете видеть из вывода внизу, он просто выводит пустую строку, где он должен выводить заголовок и, по-видимому, кнопку обзора (или что-то - право?) Для файлового поля.Форма модели Django, не создающая ожидаемых HTML

#views.py 
def upload_file(request): 
    if request.method == 'POST': 
     form = UploadFileForm(request.POST, request.FILES) 
    else: 
     form = UploadFileForm() 
    return render_to_response('files/upload_file.html', { 'form': form }) 

#models.py 
from django import forms 
from django.db import models 
from django.forms import ModelForm 

class UploadFile(models.Model): 
    title = forms.CharField(max_length = 50) 
    theFile = forms.FileField() 

    def __unicode__(self): 
     return str(title) 

class UploadFileForm(ModelForm): 
    class Meta: 
     model = UploadFile 

#upload_file.html 
<form action="" method="POST" enctype="multipart/form-data"> 
    {{ form }} 
    <input type="submit" value="Upload File"> 
</form> 

#The HTML output 
<form action="" method="POST" enctype="multipart/form-data"> 

    <input type="submit" value="Upload File"> 
</form> 

ответ

5

Фактически, на ваш взгляд, ваша ошибка заключается в объявлении вашей модели UploadFile (после двойного слежения из-за отсутствия ответа). Вы должны использовать models.CharField не forms.CharField. Таким образом, ваша модель не имеет никакого контента; поэтому ModelForm не имеет полей (он не возникал как ошибка на случай, если какой-то продвинутый пользователь захочет привязать поля формы, которые вы в конечном итоге хотели использовать для модели). Вам также нужно будет указать FileField для местоположения upload_to, главным образом вашего медиа-каталога.

class UploadFile(models.Model): 
    title = models.CharField(max_length = 50) 
    theFile = models.FileField(upload_to="files/") 

    def __unicode__(self): 
     return str(title) 
+0

Хммм, я вижу. Это (вроде) произошло со мной, так как я написал что-то подобное, используя models.foo, а не forms.foo без проблем. Однако документация Django специально использует forms.foo, когда речь идет о загрузке файлов, в частности, так что я использовал. Интересно. Спасибо! – Harv 2010-12-03 03:01:56

Смежные вопросы