Django、CBV和pk_url_kwarg缺失
我在学django。我有最新的django和Python 3.7.x 我有一个关于self.pk\u url\u kwarg的问题,以及它是如何创建的以及何时创建的。我在:上看过医生,但我没有找到我希望的答案 具体来说,我在Django、CBV和pk_url_kwarg缺失,django,Django,我在学django。我有最新的django和Python 3.7.x 我有一个关于self.pk\u url\u kwarg的问题,以及它是如何创建的以及何时创建的。我在:上看过医生,但我没有找到我希望的答案 具体来说,我在url.py文件中有一个条目,如: ... path( 'Student/createFromProfile/<uuid:profile_id>', student.CreateFromProfile.as_view(), name="st
url.py
文件中有一个条目,如:
...
path(
'Student/createFromProfile/<uuid:profile_id>',
student.CreateFromProfile.as_view(),
name="student_create_from_profile"
),
...
注意get
方法中的try
和id=self.kwargs[“profile\u id”]
部分。我试图使用id=self.kwargs[self.pk\u url\u kwarg]
,但我得到一个django调试页面,上面说它不知道pk\u url\u kwarg
是什么。我可以在PyCharm调试器中停止并检查self
,实际上,它没有pk\u url\u kwarg
的条目。这是特别奇怪的,因为我在其他视图中使用它
我缺少什么?
pk\u url\u kwarg
是URLConf关键字参数的名称,默认情况下为pk
。在您的特定情况下,您应该将其设置为profile\u id
:
@method_decorator(verified_email_required, name='dispatch')
class CreateFromProfile(CreateView):
model = Profile
success_url = '/Members'
# Here we're setting correct pk_url_kwarg
pk_url_kwarg = 'profile_id'
def get(self, request, *args, **kwargs):
try:
account_holder = Profile.objects.get(
id=self.kwargs[self.pk_url_kwarg]
)
except ObjectDoesNotExist:
messages.error(
request,
"Unknown Profile ID."
)
return HttpResponseRedirect(self.success_url)
这是因为您在url路径中指定了
第二种方法是将url配置重写为
'Student/createFromProfile/'
。这样,pk\u url\u kwarg
应该可以使用默认值。我有其他CBV,它们具有类似的url和命名参数。这些似乎自动填充了一个self.pk\u url\u kwarg
。我当然可以自己设定这个值。非常感谢。
@method_decorator(verified_email_required, name='dispatch')
class CreateFromProfile(CreateView):
model = Profile
success_url = '/Members'
# Here we're setting correct pk_url_kwarg
pk_url_kwarg = 'profile_id'
def get(self, request, *args, **kwargs):
try:
account_holder = Profile.objects.get(
id=self.kwargs[self.pk_url_kwarg]
)
except ObjectDoesNotExist:
messages.error(
request,
"Unknown Profile ID."
)
return HttpResponseRedirect(self.success_url)