【问题标题】:How to retrieve current Django user and feed it into a db entry如何检索当前 Django 用户并将其输入数据库条目
【发布时间】:2019-04-25 02:18:28
【问题描述】:

问题已结束:请参阅 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 数据库的来龙去脉,所以我不知道如何引用 this 特定的用户实例,即登录的用户。我知道 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},)

【问题讨论】:

  • 嘿 Ålasa,这是一种非常常见的模式。通常您从表单中排除用户字段,并在保存时根据当前登录的用户自动分配。表单是在管理员中还是在您编写的视图中?检查books.agiliq.com/projects/django-admin-cookbook/en/latest/…
  • 请显示您的视图/表单,或者如果您使用的是 Django 管理员,请显示您的模型管理员类。
  • 你不要在模型中这样做,你在视图中这样做,你没有显示。

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


【解决方案1】:

首先,编辑您的模型表单以删除 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 装饰器涵盖了这一点。

【讨论】:

    猜你喜欢
    • 2013-05-23
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 2020-08-27
    • 2014-09-24
    相关资源
    最近更新 更多