【问题标题】:Got an unexpected keyword argument 'pk1' issue遇到意外的关键字参数“pk1”问题
【发布时间】:2018-01-05 08:32:09
【问题描述】:

我收到一个错误,我不知道如何修复,甚至不知道为什么会收到该错误。

我正在呈现一个表单,以将团队链接到 url 中的项目,例如: http://127.0.0.1:8000/website/project/20/linkteam2 其中 20 是我的 pk1 = 20,这是项目 ID。我正在使用 pk1 和 pk2,因为当团队链接时,url 变为:http://127.0.0.1:8000/website/project/20/team_id

由于某种原因,我得到了:

TypeError at /website/project/21/linkteam2/
TeamSelect() got an unexpected keyword argument 'pk1'

我的代码是:

def TeamSelect(request):
    import pdb; pdb.set_trace()
    if request.method == "POST":
        select_form = EditSelectTeam(request.user, request.POST)
        if select_form.is_valid():
            data = select_form.cleaned_data['team_choice']
            obj2 = Project.objects.filter(project_hr_admin=request.user)
            obj3 = obj2.latest('id')
            if obj3.team_id == None:
                obj3.team_id = data
                obj3.save()
                obj4 = obj3.team_id
                obj5 = obj4.members.all()

                for i in obj5:
                    current_site = get_current_site(request)
                    message = render_to_string('acc_join_email.html', {
                        'user': i.first_name,
                        'domain':current_site.domain,
                        })
                    mail_subject = 'You have been invited to SoftScores.com please LogIn to get access to the app'
                    to_email = i.email
                    email = EmailMessage(mail_subject, message, to=[to_email])
                    email.send()
                messages.success(request, 'test')
                return HttpResponseRedirect(reverse('website:ProjectDetails', kwargs={'pk1':obj3.id, 'pk2':obj4}))
            else:
                print('this project has already a team')
        else:
            print('Non Valid form')

    else:
        import pdb; pdb.set_trace()
        select_form = EditSelectTeam(request.user)
    return render(request,'link_project.html',
                            {'select_form':select_form })

我的html:

{% load static %}
<div class="invite-team">
  <div class="jumbotron greenback">
    <div class="jumbo-text">
      <h7>Your project has been created, It is time to link a team or create a new for your project</h3>
    </div>
      <div class="jumbo-button">
        <a href="{% url 'website:team_select' pk1=project.id %}" class="btn btn-secondary" role="button"><span class="fa fa-link"></span>   Link an existing team</a>
        <a href="{% url 'website:add_team' pk1=project.id %}" class="btn btn-success" role="button"><span class="fa fa-plus-circle"></span>   Create a new team</a>
      </div>
  </div>
</div>

我的网址:

from django.conf.urls import url, include
from website import views

app_name = 'website'
urlpatterns = [
    url(r'^hr_index/$', views.HRIndex.as_view(), name='hr_index'),
    url(r'^candidate_index/$', views.CandidateIndex.as_view(),name='candidate_index'),
    url(r'^employee_index/$', views.EmployeeIndex.as_view(),name='employee_index'),
    url(r'^addproject/$', views.ProjectCreate.as_view(), name='add_project'),
    url(r'^project/(?P<pk1>[0-9]+)/addteam/$', views.TeamCreate.as_view(), name='add_team'),
    #url(r'^project/(?P<pk1>[0-9]+)/linkteam/$', views.LinkTeam.as_view(), name='link_team'),
    url(r'^project/(?P<pk1>[0-9]+)/linkteam2/$', views.TeamSelect, name='team_select'),
    url(r'^project/(?P<pk1>[0-9]+)/$',views.ProjectDetailView.as_view(), name='ProjectDetails'),
    url(r'^project/(?P<pk1>[0-9]+)/api/chart/data2/$',views.TeamChartData.as_view(), name='TeamChartData'),
    url(r'^project/(?P<pk1>[0-9]+)/(?P<pk2>[0-9]+)/$',views.EmployeeDetailView.as_view(), name='EmployeDetails'),
    url(r'^project/(?P<pk1>[0-9]+)/(?P<pk2>[0-9]+)/api/chart/data/$',views.EmployeeChartData.as_view(), name='EmployeeChartData'),
    #url(r'^project/(?P<pk>[0-9]+)/api/chart/data/$', views.ChartData.as_view(), name='chartdata'),

]

你能帮帮我吗?

【问题讨论】:

    标签: django django-templates django-views


    【解决方案1】:

    这是出乎意料的,因为您没有在视图中定义参数。您所期待的只是请求。改变

    def TeamSelect(request):
    

    def TeamSelect(request, pk1=None):
    

    为视图添加额外的参数。

    【讨论】:

    • 你能解释一下为什么 None 吗?而不是 pk1 的值?
    • 因为在 URL 中您发送的是(?P&lt;pk1&gt;[0-9]+)
    • =None 部分与 python 处理默认值的方式有关。使用像 None 这样的占位符是为了避免某些意外行为,尽管它可以有它的用途。参见例如effbot.org/zone/default-values.htm
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 2013-10-29
    • 1970-01-01
    • 2021-04-24
    • 2016-11-12
    相关资源
    最近更新 更多