嘿,我是Django的新手,我正在try 设置一个非常基本的RESTAPI.我正在使用djoser处理身份验证.但是,我想使用自定义用户模型.其中1.唯一字段是邮箱(而不是用户名),2.它有一个额外字段.

我试着遵循这两个指南,

https://testdriven.io/blog/django-custom-user-model/

https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html#abstractuser(扩展用户模型)

我这样创建模型,

class MyUser(AbstractUser):
    username = None
    email = models.EmailField(_('email address'), unique=True)
    
    DIET_CHOICES = (
        ('vegan', 'Vegan'),
        ('vegetarian', 'Vegetarian'),
        ('meat', 'Meat')
    )

    diet = models.CharField(max_length=10, choices=DIET_CHOICES)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = [diet]

    objects = CustomUserManager()

    def __str__(self):
        return self.email

使用CustomUserManager(),如https://testdriven.io/blog/django-custom-user-model/所示.

我还在AUTH\u user\u模型中注册了该用户.

Traceback (most recent call last):
  File "/home/frederik/Documents/andet/madklubTests/2madklubDjango/venv/lib/python3.9/site-packages/django/db/models/options.py", line 672, in get_field
    return self.fields_map[field_name]
KeyError: <django.db.models.fields.CharField: diet>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/frederik/Documents/andet/madklubTests/2madklubDjango/manage.py", line 22, in <module>
    main()
  File "/home/frederik/Documents/andet/madklubTests/2madklubDjango/manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/home/frederik/Documents/andet/madklubTests/2madklubDjango/venv/lib/python3.9/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
    utility.execute()
  File "/home/frederik/Documents/andet/madklubTests/2madklubDjango/venv/lib/python3.9/site-packages/django/core/management/__init__.py", line 440, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/frederik/Documents/andet/madklubTests/2madklubDjango/venv/lib/python3.9/site-packages/django/core/management/base.py", line 406, in run_from_argv
    parser = self.create_parser(argv[0], argv[1])
  File "/home/frederik/Documents/andet/madklubTests/2madklubDjango/venv/lib/python3.9/site-packages/django/core/management/base.py", line 369, in create_parser
    self.add_arguments(parser)
  File "/home/frederik/Documents/andet/madklubTests/2madklubDjango/venv/lib/python3.9/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 60, in add_arguments
    field = self.UserModel._meta.get_field(field_name)
  File "/home/frederik/Documents/andet/madklubTests/2madklubDjango/venv/lib/python3.9/site-packages/django/db/models/options.py", line 674, in get_field
    raise FieldDoesNotExist(
django.core.exceptions.FieldDoesNotExist: MyUser has no field named 'MyUser.MyUser.diet'

似乎创建超级用户可能不是一个特定的问题,而是用户注册的一般问题.然而,我不知道为什么会发生这种情况.

推荐答案

代替

REQUIRED_FIELDS = [diet]

具有

REQUIRED_FIELDS = ['diet']

你应该把name的场,而不是它本身.

Python相关问答推荐

在matplotlib中使用不同大小的标记顶部添加批注

在Docker容器(Alpine)上运行的Python应用程序中读取. accdb数据库

在Google Drive中获取特定文件夹内的FolderID和文件夹名称

提取最内层嵌套链接

如何根据一定条件生成段id

用0填充没有覆盖范围的垃圾箱

无法在盐流道中获得柱子

是否将Pandas 数据帧标题/标题以纯文本格式转换为字符串输出?

如何在不不断遇到ChromeDriver版本错误的情况下使用Selify?

Django查询集-排除True值

Django-修改后的管理表单返回对象而不是文本

如何在保持sibling 姐妹美汤的同时插入和删除标签?

如何在函数签名中输入数据类字段

获取每行NumPy最大出现次数的所有值

滚动加权平均(或类似)填充失踪大Pandas

Abstral@Property-实例化部分实现的类?

将MultiIndex列的级别转换为具有值的列(取消堆叠列)

获取文本文件并创建CSV文件

安装Spacy 2.3.5时出现错误消息-需要Microsoft Visual C++14.0或更高版本,即使已安装生成工具也是如此

Pandas Groupby在try 聚合列时引发ValueError:LEN(索引)!=len(标签)