,如果你的用户进行身份验证,您只能得到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