的幾個問題,我已經通過文檔檢索,這樣做只是爲了獲得更多的困惑。用戶訪問其他用戶的表單使用這裏的Django拉條
主要問題:
我有我加載到views.py一個UserProfileForm:
from braces.views import LoginRequiredMixin, CsrfExemptMixin
class UpdateUserProfileView(LoginRequiredMixin, CsrfExemptMixin, UpdateView):
model = UserProfile
success_url = reverse_lazy('profile_update')
form_class = UserProfileForm
在我的urls.py:
urlpatterns = patterns('',
url(r'^(?P<pk>\d+)/$', UpdateUserProfileView.as_view(), name='profile_update'),
)
當我登錄爲user_id 2
,我可以看到我自己的個人資料在/profile/2/
,但是當我在/profile/1/
鍵,我可以編輯的用戶個人資料user_id 1
。有什麼我在這裏做錯了嗎?我應該如何限制訪問?我應該在我的模板中進行嗎? (我已經登錄的兩個用戶之前)
次級問題:
reverse_lazy似乎並不在這裏工作返回此錯誤:
Reverse for 'profile_update' with arguments '()' and keyword arguments '{}' not found.
我已經在我的模型增加了get_absolute_url
,並調用這個網址.py來自我的主要項目的網址。單獨的視圖創建配置文件,什麼是防止從形式保存時創建重複鍵的最佳做法?
編輯:
基於@ mariodev的建議,我改寫了我的urls.py:
urlpatterns = patterns('',
url(r'^create/$', CreateUserProfileView.as_view(), name='profile_create'),
url(r'^view/$', UpdateUserProfileView.as_view(), name='profile_update'),
)
在views.py,我添加了一個新的類:
class GetProfileMixin(object):
def get_object(self):
profile = get_object_or_404(UserProfile, user=self.request.user)
if profile.user != self.request.user:
raise Http404
return profile
而且使用調用UpdateUserProfileFormView:
class UpdateUserProfileView(LoginRequiredMixin, GetProfileMixin, UpdateView):
model = UserProfile
form_class = UserProfileForm
左移再次保存對象時,如果我再講CreateView的關於在USERPROFILE表URL和foreign_key重複一些小的問題。我相信這是一個常見問題,我錯過了明顯的答案。
編輯2:
改變了以下內容:
def form_valid(self, form):
try:
created = UserProfile.objects.get(user=self.request.user)
except UserProfile.DoesNotExist:
profile = form.save(commit=False)
profile.user = self.request.user
profile.save()
return super(CreateUserProfileView, self).form_valid(form)
return HttpResponseRedirect('/accounts/profile/')
不是最優雅的解決方案,用戶將獲取即使目前的個人資料中,如果提交值的空形式,只會重定向到個人資料頁面。
是否要限制訪問其他用戶的個人資料頁面,或者只想禁用編輯。 – Sudipta
想限制訪問其他用戶的配置文件。 – mrkre