,如果你的用戶進行身份驗證,您只能得到request.user.username
。要檢查它使用request.user.is_authenticated()
。
因此,我認爲它看起來有點像這樣:
def new_rate(request):
if request.method == 'POST':
form = RateForm(request.POST)
current_user = request.user
if form.is_valid() and current_user.is_authenticated():
instance = form.save(commit=False)
try:
instance.rater = current_user
instance.user = current_user
instance.validate_unique()
instance.save()
form.save_m2m()
return HttpResponseRedirect('/user/' + current_user.username)
但對我來說,你的這個設計聽上去有缺陷。如果您已經使用request.POST,則應該POST當前配置文件的ID。
如果您正在查看網址/users/500
並且您有表單。發送ID 500,然後在視圖中它應該得到的當前配置文件的用戶,如:
from django.contrib.auth import get_user_model
User = get_user_model()
def new_rate(request):
if request.method == 'POST':
form = RateForm(request.POST)
current_user = request.user
profile_id = request.POST['profile_id']
if form.is_valid() and current_user.is_authenticated():
instance = form.save(commit=False)
profile_user = User.objects.get(pk=profile_id)
try:
instance.rater = current_user
instance.user = profile_user
instance.validate_unique()
instance.save()
form.save_m2m()
# it should return us back to that profile, not the request.user's
return HttpResponseRedirect('/user/' + profile_user.username)
你爲什麼想將其保存到已登錄的用戶,你也應該讓這個請求得到一個代替POST。 –
首先,不要泄露,這是粗魯的,不要使用感嘆號。其次,你還沒有提供任何有用的信息。什麼是「當前配置文件查看用戶名」?它來自哪裏? –
理想情況下,您應該將用戶ID或用戶slug作爲URL的一部分發送。例如'/ rating/new/ /'並以這種方式處理。 –
karthikr