2013-11-18 2 views
0

Я новичок в django и пытаюсь создать простую картинку uplad app, где пользователи могут загружать изображения.Как автоматически назначить загруженное изображение пользователю?

Вот детали:

model.py

class UserPic(models.Model): 
    user = models.ForeignKey(User) 
    picfile = models.FileField(upload_to=get_uplaod_file_name) 

views.py

@login_required 
def list(request): 
    # Handle file upload 
    if request.method == 'POST': 
     picform = PicForm(request.POST, request.FILES, instance=request.user) 
     if picform.is_valid(): 

      newpic = UserPic(picfile = request.FILES['picfile']) 
      newpic = picform.save(commit=False) 
      newpic.user = request.user 
      newpic.save() 
      message = "file %s is uploaded" % newpiC#**returns name of current user instead of the file's name** 
      userpics = UserPic.objects.all() 
      # Redirect to the document list after POST 
      return render_to_response('userpics/listpics.html', 
             {'userpics': userpics, 'picform': picform}, 
             context_instance=RequestContext(request) 
    ) 

forms.py

class PicForm(forms.ModelForm): 

     class Meta: 
       model= UserPic 
       fields = ('picfile',) 

listpic.html

<p> Upload pics to your gallery </p> 
{% if userpics %} 
     <ul> 
     {% for pic in userpics %} 
      <li><a href="{{ pic.picfile.url }}">{{ pic.picfile.name }}</a></li> 
     {% endfor %} 
     </ul> 
    {% else %} 
     <p>No userpics.</p> 
    {% endif %} 

     <!-- Upload form. Note enctype attribute! --> 
     <form action="/add-pic/" method="post" enctype="multipart/form-data"> 
      {% csrf_token %} 

<ul> 
{{picform.as_ul}} 
</ul> 
      </p> 
      <p><input type="submit" value="Upload" /></p> 
     </form> 

Upade: Согласно предложению, я изменил представления, и ошибка исчезла, но файл не сохраняется в базе данных.

В основном моя проблема заключается в том, как автоматически назначать пользователя в качестве внешнего ключа. Я пробую несколько разных решений. но все же получил на это акции и ценю вашу помощь, чтобы решить эту проблему.

ответ

0

Вы пытаетесь создать новый объект. Для работы commit=False вы должны использовать объект ModelForm. Принимая во внимание, что вы создаете объект модели непосредственно из класса, следовательно, это ошибка.

Попробуйте что-то вроде этого:

if request.method == 'POST': 
    picform = PicForm(request.POST, request.FILES) 
    if picform.is_valid(): 
     newpic = picform.save(commit=False) 
     newpic.user= request.user #user would be undefined. 
     newpic.save() 
    #rest of the code. 

Подробнее о django-modelforms here. THe save() method in particular

+0

После добавления picform я получаю 'global name' user 'is not defined'. – hbp

+0

точно. проверьте комментарий. это должно быть 'request.user' – karthikr

+0

Извините, ошибки не исчезли, но я не сохранил изображение, поскольку я проверяю базу данных. «newpic», похоже, превратился в объект пользователя, поскольку, когда я пишу его как строку, он печатает текущее имя пользователя. Здесь что-то не так. – hbp

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