У пользователя будут фотографии, которые будут связаны с их конкретным альбомом.Обработка нескольких форм моделей в одной форме html
Так что это была модель для этого:
class Album(models.Model):
user = models.ForeignKey(User)
title = models.CharField(max_length=200)
pub_date = models.DateTimeField(auto_now_add=True, auto_now=False)
update = models.DateTimeField(auto_now_add=False, auto_now=True)
class Photo(models.Model):
photo_privacy = models.CharField(max_length=1,choices=PRIVACY, default='F')
user = models.ForeignKey(User)
caption = models.TextField()
image = models.ImageField(upload_to=get_upload_file_name)
pub_date = models.DateTimeField(auto_now_add=True, auto_now=False)
Views.py:
def create_album(request, user_name):
user = User.objects.get(username=unquote(user_name))
if request.method=='POST':
pform = AlbumPhotoForm(request.POST, request.FILES)
aform = AlbumForm(request.POST)
p_valid = pform.is_valid()
a_valid = aform.is_valid()
if p_valid and a_valid:
photo = pform.save(commit=False)
album = aform.save(commit=False)
photo.user = user
album.user = user
album.save()
photo.album = album
photo.save()
return HttpResponseRedirect('/'+user.username+'/photos')
else:
return render(request, 'create_album.html',{
'pform':pform,
'aform':aform
})
else:
pform = AlbumPhotoForm()
aform = AlbumForm()
return render(request, 'create_album.html', {
'pform':pform,
'aform':aform
})
И форма:
<form action="/{{ user.username }}/create_album/" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ aform.as_p }}
{{ pform.as_p }}
<input type="submit" value="Create and Upload Album"/>
</form>
Это прекрасно работает, если у меня только для загрузки один файл (фото) с этой формой.
Update:
Однако то, что я хочу сделать это, показать минимум три входа для загрузки фотографий в новый альбом:
<form action="/{{ user.username }}/create_album/" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ aform.as_p }}
{{ pform.as_p }}
{{ pform.as_p }}
{{ pform.as_p }}
<input type="submit" value="Create and Upload Album"/>
</form>
При этом, только последний pform
это получает сохранены. А остальные два pform
игнорируются. Как я могу сохранить все три формы фотографии (pform
) соответственно?
Или есть какой-либо другой способ? Ваша помощь будет очень признательна! Спасибо.
Привет, Я думаю, вы не получите меня. Или, может быть, я не получу тебя. Я обновил вопрос. Не могли бы вы взглянуть на него. Спасибо. – Kakar
Я понимаю, что ты прав. См. Обновленный ответ. – catavaran
Да !!! Ты был прав! Спасибо! Работать и понимать! – Kakar