首页 > 解决方案 > Django 将 ManytoManyField 设置为默认用户模型

问题描述

我需要设置manytomany与默认 django 用户表的关系。有没有办法实现它而不是使用AbstractUserdjango 的方法(扩展用户模型)?

标签: pythondjangomany-to-many

解决方案


您应该使用 Django 的get_user_model()函数 [Django-doc],如文档中所述:

而不是User直接引用,您应该使用django.contrib.auth.get_user_model(). 此方法将返回当前活动的用户模型——如果指定了自定义用户模型,则返回自定义用户模型,User否则。

即使您使用的是 Django 的默认用户模型,也最好使用get_user_model,因为如果您以后改变主意,可以更改AUTH_USER_MODEL设置 [Django-doc],并且对用户模型的引用将被更新。

例如:

from django.db import models
from django.contrib.auth import get_user_model

class SomeModel(models.Model):
    users = models.ManyToManyField(get_user_model())

usingAbstractUser不起作用,因为这是一个抽象模型,它不会引用您使用的用户模型。

此外,如果您想使用 Django 的内置模型,您不必为自己创建子类。如果您希望自己定义用户模型,则可以进行子类化。AbstractUserUserAbstractUser


推荐阅读