如何在通用相册中创建视图(通用)项目 - url 方向问题

How to CreateView (generic) item in generic Album - issue with url directions

我在使用通用视图时遇到问题。我尝试创建表单以将照片添加到相册,但是当我通过尝试添加一些照片来测试我的应用程序时,它会重定向我以创建相册(它应该创建照片)。为什么它hapening和解决方案是什么? (也许通用不是进行此类显示的最佳方式?)一些线索?谢谢!

Ps。我注意到它是正确的 url 但随后转到 "views.DetailView.as_view(), name='detail' " 而不是正确的 "views.FotoCreate.as_view, name='foto-add' "

-这是来自细节 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'),

-型号

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

和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)

我认为它 out.I 更改了一些 urls 路径并且它开始正常工作。我仍然不知道为什么以前不起作用,但现在它起作用了,所以对我来说它并不重要。解决方案如下:

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'),

 ]

谢谢我!