Reputation: 9595
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
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