如何检索当前 Django 用户并将其输入数据库条目
How to retrieve current Django user and feed it into a db entry
问题已解决:请参阅 Alasdair 发布的回复以获取解决方案。
我正在将宠物实例添加到 table:
class Pet(models.Model):
petName = models.CharField(max_length=100, default='My Pet')
petImage = models.ImageField(default='default.png', blank=True)
author = models.ForeignKey(User, on_delete=models.CASCADE, default=None)
上面的代码很好,但是最后一行的 "User" 在下拉菜单中向我提供了所有曾在我的应用程序上注册过的用户(当以表单形式查看时)。我希望作者(即登录的用户)自动与这个新宠物对象相关联。
我不知道内置 auth_user 数据库的来龙去脉,所以我不知道如何引用 this 用户的特定实例,即谁是已登录。我知道 request.user 在其他页面上 returns 用户已登录,我只是不知道如何将该变量输入该模型。有什么想法吗?
* 更新:包括 views.py *
@login_required(login_url="/accounts/login/")
def add_pet(request):
if request.method == 'POST':
form = forms.AddPet(request.POST, request.FILES)
if form.is_valid():
instance = form.save(commit=False)
instance.save()
return redirect('yourPet')
else:
form = forms.AddPet()
return render(request, 'records/pet_create.html', {'form': form},)
首先,编辑您的模型表单以删除 author
字段。
class AddPet(forms.ModelForm):
class Meta:
model = Pet
fields = ['petName', 'petImage'] # leave out author
那么在您看来,您可以在保存实例之前将instance.author
设置为request.user
。
if request.method == 'POST':
form = forms.AddPet(request.POST, request.FILES)
if form.is_valid():
instance = form.save(commit=False)
instance.author = request.user
instance.save()
return redirect('yourPet')
最后一步是考虑用户未登录的情况,但您已经使用 login_required
装饰器解决了这个问题。
问题已解决:请参阅 Alasdair 发布的回复以获取解决方案。
我正在将宠物实例添加到 table:
class Pet(models.Model):
petName = models.CharField(max_length=100, default='My Pet')
petImage = models.ImageField(default='default.png', blank=True)
author = models.ForeignKey(User, on_delete=models.CASCADE, default=None)
上面的代码很好,但是最后一行的 "User" 在下拉菜单中向我提供了所有曾在我的应用程序上注册过的用户(当以表单形式查看时)。我希望作者(即登录的用户)自动与这个新宠物对象相关联。
我不知道内置 auth_user 数据库的来龙去脉,所以我不知道如何引用 this 用户的特定实例,即谁是已登录。我知道 request.user 在其他页面上 returns 用户已登录,我只是不知道如何将该变量输入该模型。有什么想法吗?
* 更新:包括 views.py *
@login_required(login_url="/accounts/login/")
def add_pet(request):
if request.method == 'POST':
form = forms.AddPet(request.POST, request.FILES)
if form.is_valid():
instance = form.save(commit=False)
instance.save()
return redirect('yourPet')
else:
form = forms.AddPet()
return render(request, 'records/pet_create.html', {'form': form},)
首先,编辑您的模型表单以删除 author
字段。
class AddPet(forms.ModelForm):
class Meta:
model = Pet
fields = ['petName', 'petImage'] # leave out author
那么在您看来,您可以在保存实例之前将instance.author
设置为request.user
。
if request.method == 'POST':
form = forms.AddPet(request.POST, request.FILES)
if form.is_valid():
instance = form.save(commit=False)
instance.author = request.user
instance.save()
return redirect('yourPet')
最后一步是考虑用户未登录的情况,但您已经使用 login_required
装饰器解决了这个问题。