如何检索当前 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 装饰器解决了这个问题。