0

here is screenshot error i dont understand why i am getting error after clicking add photo button in details page but if i type url it works fine but after submitting i want to return to the details page but it gives me this error my 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 Category, Photo

class IndexView(generic.ListView):
    template_name='gallery/index.html'
    context_object_name='cat'
    def get_queryset(self):
        return Category.objects.all()



class DetailView(generic.DetailView):
    model=Category
    template_name='gallery/detail.html'
    context_object_name='cater'



class CategoryCreate(CreateView):
    model=Category
    fields=['Category_title','artist','Category_logo']

my urls.py

from django.conf.urls import url
from . import views
app_name='gallery'
urlpatterns=[

   url(r'^$',views.IndexView.as_view(),name='index'),
   url(r'^(?P<pk>[0-9]+)/$',views.DetailView.as_view(),name='detail'),

   #adding photo to category
   url(r'(?P<pk>[0-9]+)/add/$',views.PhotoCreate.as_view(),name='add-      photo'),
  url(r'category/add/$',views.CategoryCreate.as_view(),name='add-category'),

   url(r'category/(?P<pk>[0- 9    ]+)/$',views.CategoryUpdate.as_view(),name='update-category'),

]

my models.py

from django.db import models
from django.core.urlresolvers import reverse
# Create your models here.
class Category(models.Model):
    Category_title=models.CharField(max_length=200)
    artist=models.CharField(max_length=200)
    Category_logo=models.FileField()
    # returns to details page after submitting category form
    def get_absolute_url(self):
        return reverse('gallery:detail',kwargs={'pk':self.pk})    

   def __str__(self):
        return self.Category_title + '-' +self.artist

class Photo(models.Model):
    cat=models.ForeignKey(Category,on_delete=models.CASCADE)
    file_type=models.FileField()
    photo_title=models.CharField(max_length=100)
    # returns to details page after submitting photo form
    def get_absolute_url(self):
        return reverse('gallery:add-photo',kwargs={'pk':self.pk})    


    def __str__(self):
        return self.photo_title

1 Answers1

1

The problem is that you are not passing the pk in the template. From the screenshot, if you look at the highlight line in the template it is clear that your URL is missing the keyword argument that is needed...

The same is also mentioned in the first line of the error page (with keyword args {})

Just mention it after the url name and it should work

{% url 'gallery:add-photo' photo.pk %}  

or you could also do

{{ photo.get_absolute_url }}
Resley Rodrigues
  • 2,218
  • 17
  • 17