J'ai des problèmes avec les vues génériques. J'essaye de créer un formulaire pour ajouter un foto aux albums mais quand je teste mon application en essayant d'ajouter un foto il me redirige pour créer Album (Cela suppose de créer Foto). Pourquoi ça se passe et quelle est la solution? (peut-être générique n'est pas la meilleure façon de faire de tels écrans?) quelques indices? Merci!Comment créer un élément générique (générique) dans l'album générique - problème avec les directions de l'URL
Ps. je remarque qu'il obtient l'URL correcte mais va ensuite à "views.DetailView.as_view(), name = 'detail'" pas à droite "views.FotoCreate.as_view, name = 'foto-add'"
- Ceci est du détail html:
<a href="{% url 'albumbum:foto-add' album.pk %}" class="btn btn-default active" role="button">
<span class="fa fa-plus fa-1x" aria-hidden="true"></span> Dodaj element do albumu</a>
urls:
urlpatterns = [
# /albumbum/
url(r'^$', views.IndexView.as_view(), name='index'),
# /albumbum/<albumbum.id>/
url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'),
# /albumbum/add/
url(r'add/$', views.AlbumCreate.as_view(), name='add'),
# /albumbum/albumbum/2/
url(r'albumbum/(?P<pk>[0-9]+)/$', views.AlbumUpdate.as_view(), name='albumbum-update'),
# /albumbum/albumbum/2/delete
url(r'albumbum/(?P<pk>[0-9]+)/delete/$', views.AlbumDelete.as_view(), name='albumbum-delete'),
# /albumbum/2/add
url(r'^(?P<pk>[0-9]+)/add/$', views.FotoCreate.as_view, name='foto-add'),
-Modèles
class Album(models.Model):
autor = models.CharField(max_length=250)
nazwa_albumu = models.CharField(max_length=500)
temat = models.CharField(max_length=100)
opis_albumu = models.CharField(max_length=700, default="abc")
album_logo = models.CharField(max_length=1000)
def get_absolute_url(self):
return reverse('albumbum:detail', kwargs={'pk': self.pk})
def __str__(self):
return self.nazwa_albumu + ' - ' + self.autor
class Foto(models.Model):
albumnr = models.ForeignKey(Album, on_delete=models.CASCADE)
nazwa_foto = models.CharField(max_length=250, default='abc')
obraz = models.CharField(max_length=1000, default='abc')
def get_absolute_url(self):
return reverse('albumbum:detail', kwargs={'pk': self.pk})
def __str__(self):
return self.nazwa_foto
Et Views.py
from django.views import generic
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.core.urlresolvers import reverse_lazy
from .models import Album, Foto
class IndexView(generic.ListView):
template_name = 'albumbum/index.html'
context_object_name = 'object_list'
def get_queryset(self):
return Album.objects.all()
class DetailView(generic.DetailView):
model = Album
template_name = 'albumbum/detail.html'
class AlbumCreate(CreateView):
model = Album
fields = ['autor', 'nazwa_albumu', 'temat', 'album_logo']
class AlbumUpdate(UpdateView):
model = Album
fields = ['autor', 'nazwa_albumu', 'temat', 'album_logo']
class AlbumDelete(DeleteView):
model = Album
success_url = reverse_lazy('albumbum:index')
class FotoCreate(CreateView):
model = Foto
fields = ['nazwa_foto', 'obraz']
def form_valid(self, form):
album = Foto.objects.get(pk=self.kwargs.get('pk'))
form.instance.album = album
return super(FotoCreate, self).form_valid(form)