Python 当基本django用户模型被覆盖时,如何正确地处理作为作者的当前登录用户?
交易如下: users/models.py(这里我覆盖了基于django的模型): 并使用(例如,当我添加对象(帖子时))objects/views.py:Python 当基本django用户模型被覆盖时,如何正确地处理作为作者的当前登录用户?,python,django,Python,Django,交易如下: users/models.py(这里我覆盖了基于django的模型): 并使用(例如,当我添加对象(帖子时))objects/views.py: from django.shortcuts import render, redirect from django.views import generic from objects.models import Object, ProfileUser from .forms import ObjectForm, CommentForm fr
from django.shortcuts import render, redirect
from django.views import generic
from objects.models import Object, ProfileUser
from .forms import ObjectForm, CommentForm
from django.contrib import messages
class UserObjectsView(generic.ListView):
template_name = 'user_objects.html'
def get_queryset(self):
user_id = self.kwargs['pk']
return Object.objects.filter(author_id = user_id)
def add_object(request):
if not request.user.is_authenticated:
messages.info(request, 'За да добавите нов Обект, трябва да сте регистриран потребител!')
return redirect('account_login')
form = ObjectForm(request.POST or None)
if form.is_valid():
obj = form.save(commit=False)
obj.author = ProfileUser.objects.get(user=request.user)
obj.save()
messages.success(request, 'Успешно добавихте нов Обект, може да видите вашите обекти във вашия профил!')
return redirect('home')
context = {
'form': form
}
return render(request, "add_object.html", context)
def show_object(request, pk):
obj = Object.objects.get(id=pk)
context = {
'object': obj
}
return render(request, "show_object.html", context)
def add_comment_to_object(request, pk):
obj = Object.objects.get(id=pk)
form = CommentForm(request.POST or None)
if form.is_valid():
comment = form.save(commit=False)
comment.object = obj
user = request.user
author = ProfileUser.objects.get(user=user)
comment.author = author
comment.save()
return redirect('home')
else:
form = CommentForm()
context = {
'form': form
}
return render(request, 'add_comment.html', context)
如您所见,我还使用这些行来获取当前用户:
obj.author = ProfileUser.objects.get(user=request.user)
但我不太确定,这是正确的方法?你的问题到底是什么?你想实现什么?你当前的代码出了什么问题?@Vincent没有错误。我很好奇这是正确的方法,还是有更好的方法。这是正确的方法。你能做的就是给你的代码增加一些“安全性”。例如如果当前用户找不到ProfileUser,会发生什么情况。你可以试一下,除了块。此外,是否始终为登录用户创建ProfileUser?如果没有,您可以对ProfileUser实例使用get\u或\u create方法。您的问题是什么?你想实现什么?你当前的代码出了什么问题?@Vincent没有错误。我很好奇这是正确的方法,还是有更好的方法。这是正确的方法。你能做的就是给你的代码增加一些“安全性”。例如如果当前用户找不到ProfileUser,会发生什么情况。你可以试一下,除了块。此外,是否始终为登录用户创建ProfileUser?如果没有,您可以为ProfileUser实例使用get\u或\u create方法。
obj.author = ProfileUser.objects.get(user=request.user)