2017-08-21 3 views
0

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>&nbsp;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) 

Répondre

0

Je l'ai compris. J'ai changé un peu les chemins d'URL et ça commence à fonctionner correctement. Je ne sais toujours pas pourquoi avant ne fonctionnait pas mais maintenant cela fonctionne donc pour moi ce n'est pas très important. Solution ci-dessous:

urlpatterns = [ 
# /albumbum/ 
url(r'^$', views.IndexView.as_view(), name='index'), 

# /albumbum/<albumbum.id>/ 
url(r'^(?P<album_id>[0-9]+)/$', views.DetailView.as_view(), name='detail'), 

# /albumbum/add/ 
url(r'albumadd/$', views.AlbumCreate.as_view(), name='album-add'), 

# /albumbum/albumbum/2/ 
url(r'albumbum/(?P<album_id>[0-9]+)/$', views.AlbumUpdate.as_view(), name='albumbum-update'), 

# /albumbum/albumbum/2/delete 
url(r'albumbum/(?P<album_id>[0-9]+)/delete/$', views.AlbumDelete.as_view(), name='albumbum-delete'), 

# /albumbum/2/add 
url(r'^(?P<album_id>[0-9]+)/fotoadd/$', views.FotoCreate.as_view(), name='foto-add'), 

] 

Merci!