ApathyBear
ApathyBear

Reputation: 9595

Reverse for 'invite' with arguments '('tk-test',)' and keyword arguments '{}' not found. 0 pattern(s) tried: []

I have an invite_user view that looks like this:

class invite_user(View):

    template_name = "invites/invite.html"


    def get(self, request, *args, **kwargs):
        form = InviteForm()
        return render(request, self.template_name, {'form': form})


    def post(self, request, *args, **kwargs):
        form = InviteForm(request.POST)
        if form.is_valid():
            user = User.objects.create_user(form.cleaned_data['first_name'], form.cleaned_data['email'], '**')
            user.first_name=form.cleaned_data['first_name']
            user.last_name = form.cleaned_data['last_name']
            user.is_active = False
            user.save()
            #now make invite
            invite = Invite.objects.create(user=user, cookie='ck-test', token='tk-test')
            send_mail('Subject', 'Link: http://somesite.com%s' % invite.get_absolute_url(), [user.email])
            return redirect(reverse('home_page'))
        else:
            form = InviteForm()
            return render(request, self.template_name, {'form': form})

When running, django is telling me it cannot find an invite object with the argument 'tk-test'. I am a bit confused here, since I am clearly making an instance of Invite with token='tk-test'. I may be confused with what get_absolute_url should be used for.

Here is the model:

class Invite(models.Model):
    user = models.OneToOneField(User)
    cookie = models.SlugField()
    token = models.SlugField()

    def __unicode__(self):
        return u"%s's invite" % (self.user)

    def get_absolute_url(self):
        return (reverse('invite', args=[self.token]))

I can provide some middleware that is being used, too, but that seems irrelevant here unless requested. Can someone explain what is going on here?

My main URLConf as requested:

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
from project.apps.blog.views import home, about
from project.apps.suggest.views import suggest, thankyou
from django.core.urlresolvers import reverse
from project.userprofile.views import Login, Logout, Signup
from porject.apps.invites.views import invite_user
#used for serving static locally
from django.conf import settings



urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),

    #blog app
    url(r'^$', home.as_view(), name="home_page"),
    url(r'^about/$', about.as_view(), name='about_page'),

    #suggest app
    url(r'^suggest/$', suggest.as_view(), name='suggest_page'),
    url(r'^thankyou/$', thankyou.as_view(), name='thank_you_page'),

    #userprofile
    url(r'^login/$', Login.as_view(), name='login_page'),
    url(r'^logout/$', Logout.as_view(), name='logout_page'),
    url(r'^signup/$', Signup.as_view(), name='signup_page'),

    #invite app
    url(r'^request-invite/$', invite_user.as_view(), name="invite_user_page"),



)

Upvotes: 0

Views: 178

Answers (1)

Aamir Rind
Aamir Rind

Reputation: 39659

You are missing an entry for the URL named invite as you are using it in get_absolute_url of model Invite. If you have defined the view for that model you should add the URL entry. If this model does not have any view then you don't need to define get_absolute_url. As to what exactly get_absolute_url is for read here

Upvotes: 1

Related Questions