如何检索当前的Django用户并将其输入数据库条目

时间:2018-11-22 11:42:53

标签: django sqlite django-models django-forms django-database

问题已结束:请参阅Alasdair发布的答复以获取解决方案。

我正在将Pets实例添加到表中:

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)

上面的代码很好,但是最后一行上的“用户”为我提供了我在下拉菜单中(当被视为表单时)在我的应用上注册的所有用户。我希望作者(即已登录的用户)自动与此新宠物对象关联。

我不知道内置auth_user数据库的来龙去脉,所以我不知道如何引用这个特定用户实例,即登录的那个实例。我知道request.user在其他页面上返回的用户已登录,我只是不知道如何将变量输入此模型。有什么想法吗?

*更新:包含的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},)

1 个答案:

答案 0 :(得分:0)

首先,编辑模型表格以删除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装饰器解决了这种情况。