Я новичок в 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: Согласно предложению, я изменил представления, и ошибка исчезла, но файл не сохраняется в базе данных.
В основном моя проблема заключается в том, как автоматически назначать пользователя в качестве внешнего ключа. Я пробую несколько разных решений. но все же получил на это акции и ценю вашу помощь, чтобы решить эту проблему.
После добавления picform я получаю 'global name' user 'is not defined'. – hbp
точно. проверьте комментарий. это должно быть 'request.user' – karthikr
Извините, ошибки не исчезли, но я не сохранил изображение, поскольку я проверяю базу данных. «newpic», похоже, превратился в объект пользователя, поскольку, когда я пишу его как строку, он печатает текущее имя пользователя. Здесь что-то не так. – hbp