【问题标题】:Django CreateView autofill custom userDjango CreateView 自动填充自定义用户
【发布时间】:2018-02-08 18:20:22
【问题描述】:

我想使用 Django 的 GCBV CreateView 以当前用户自动填充我的模型上的 created_by 字段。官方文档有一个good example here,但我使用的是自定义用户模型并且无法使其正常工作。

这是我目前的设置:

# models.py
from django.conf import settings
from django.contrib.auth.models import User
from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=200)
    created_by = models.ForeignKey(
        settings.AUTH_USER_MODEL, 
        on_delete=models.CASCADE,
    )

# views.py
from django.contrib.auth import get_user_model
from django.views.generic.edit import CreateView
from myapp.models import Author

class AuthorCreate(CreateView):
    model = Author
    fields = ['name']

    def form_valid(self, form):
        form.instance.created_by = self.request.get_user_model()
        return super().form_valid(form)

但是在提交表单时我得到了错误:

AttributeError at /posts/new/
'WSGIRequest' object has no attribute 'get_user_model'

如果我不尝试自动包含用户,则表单可以正常工作,这就是为什么我不认为问题出在我的自定义用户配置上。这段代码是这样的:

class PostCreateView(CreateView):
    model = Author
    fields = ['name', 'created_by']

【问题讨论】:

  • 您能分享一下您是如何设置自定义用户的吗?
  • 我很确定这不是问题,因为如果我只是在AuthorCreate 中设置created_by 字段并删除def from_valid... 代码,那么表单就可以工作,它只需要我手动选择用户。但我会在几秒钟内发布我的自定义用户配置。

标签: python django django-custom-user


【解决方案1】:

要修复您看到的特定错误,您应该能够直接使用 self.request.user,如您链接的示例中所示。 (假设自定义用户模型设置正确。)

form.instance.created_by = self.request.user

get_user_model函数一般这样访问User类:

from django.contrib.auth import get_user_model
User = get_user_model()

一般代替

from django.contrib.auth.models import User

【讨论】:

  • 是的,你是对的。我将User 与请求中的user 混淆了。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多