Django将ManytoManyField设置为默认用户模型

时间:2019-08-01 10:24:29

标签: python django many-to-many

我需要为默认的django用户表设置一个manytomany关系。有什么方法可以实现它,而不是使用django的AbstractUser方法? (扩展用户模型)?

2 个答案:

答案 0 :(得分:1)

您应该使用Django的get_user_model() function [Django-doc],如文档中所指定:

  

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

即使您正在使用Django的默认用户模型,也最好使用get_user_model,因为如果您以后改变主意,则可以更改AUTH_USER_MODEL setting [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())

使用AbstractUser 不会有效,因为这是一个抽象模型,并且不会引用您使用的用户模型。

此外,如果您想使用Django的内置AbstractUser模型,则不必 自己继承User。如果希望自己定义用户模型,则可以将AbstractUser子类化。

答案 1 :(得分:0)

您无需扩展默认的Django User表即可与其建立多对多关系。

将多对多关系添加到正在创建的模型中,Django将在后台创建第三个表,该表使用对每个对象使用ForeignKey来存储关系。