我应该如何从链接传递主键

时间:2018-03-30 10:00:56

标签: django

在我的用户个人资料的django模板中,我有一个编辑个人资料模板的链接。但它没有给出反向发现的错误。这是我的html模板,我从模型UserProfile传递我的pk是用户。我无法通过主键在反转功能中使用它(这是我猜的错误)。另外如何调用变量中的主键以将其传递给模板?       按钮

这是我的views.py

class NewUserProfileView(FormView):
template_name = "visit/user_profile.html"
form_class = UserProfileForm

def form_valid(self, form):
    form.save(self.request.user)
    return super(NewUserProfileView, self).form_valid(form)

def get_success_url(self, *args, **kwargs):
    return reverse("main:home")

class EditUserProfileView(UpdateView):#Note that we are using UpdateView and not FormView
    model = UserProfile
    form_class = UserProfileForm
    template_name = "visit/user_profile.html"

def get_object(self, *args, **kwargs):
    user = get_object_or_404(User, pk=self.kwargs['pk'])

    # We can also get user object using self.request.user  but that doesnt work
    # for other models.

    return user.userprofile

def get_success_url(self, *args, **kwargs):
    return reverse("main:home")

这是我的网址

url(r'^profiles/new/(?P<pk>\d+)/$', NewUserProfileView.as_view(), name="new-user-profile"),
url(r'^users/(?P<pk>\d+)/edit/', EditUserProfileView.as_view(), name="edit-user-profile"),

这是错误Reverse for 'new-user-profile' with keyword arguments '{'pk': <SimpleLazyObject: <User: sid>>}' not found. 1 pattern(s) tried: enter code here['profiles/new/(?P<pk>\\d+)/$']

1 个答案:

答案 0 :(得分:0)

如果只有当前用户可以编辑自己的个人资料,我认为这可能更好。 在您的模型中,请确保定义如下内容:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    ......

然后,您可以在任何视图和模板上调用request.user.profile