使用参数'('tk-test',)'和关键字参数'{}'找不到'邀请'。尝试过0种模式:[]

时间:2014-10-20 21:42:12

标签: python django django-models django-forms django-views

我有一个如下所示的invite_user视图:

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

运行时,django告诉我它找不到带有参数'tk-test'的邀请对象。我在这里有点困惑,因为我显然正在使用token ='tk-test'创建一个Invite实例。我可能会对get_absolute_url应该用于什么感到困惑。

以下是模型:

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

我也可以提供一些正在使用的中间件,但除非有要求,否则这似乎无关紧要。有人可以解释这里发生了什么吗?

我的主要URLConf按要求:

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



)

1 个答案:

答案 0 :(得分:1)

在模型invite的{​​{1}}中使用时,您缺少名为get_absolute_url的网址的条目。如果已为该模型定义了视图,则应添加URL条目。如果此模型没有任何视图,则您不需要定义Invite。关于阅读here

的确切get_absolute_url到底是什么