繁体   English   中英

如何使Django自定义用户模型成为抽象类

[英]How to make Django custom user model an abstract class

我已经在django中创建了自己的自定义用户模型,并在settings.py中指定了相同的模型:

AUTH_USER_MODEL = 'userprofile.User'

此后,我将User创建为抽象类,因为我想从该类派生两个独立的类-VendorCustomer 这将创建两个单独的数据库表。

当我创建另一个类ProductReview时,会出现问题。 此类需要添加评论的用户的外键,并且该用户可以是VendorCustomer 我不确定如何在此放置外键约束,因为settings.AUTH_USER_MODEL将不起作用,因为User是一个抽象类。

以下是类结构:

class UserManager(BaseUserManager):

class User(PermissionsMixin, AbstractBaseUser):
    class Meta:
        abstract = True

class Vendor(User):

class Customer(User):

class ProductReview(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL, related_name='reviews', null=True, blank=True)

编辑 -我为每个模型分别制作了三个不同的表格。

ProductReview模型类中的用户字段声明将与USER模型映射。 要定义它是Vendor还是Customer您需要声明另一个字段,可能是整数字段,且其映射声明为

TYPE_OF_USER_MAPPING = {
    1: 'Vendor',
    2: 'Customer'
}

然后创建一个查询以检查原始USER是哪个VendorCustomer

对于您的情况,我将考虑更改模型。 我将如何做:

  • 保留默认User作为Django的auth用户模型。
  • 创建与User模型具有一对一关系的VendorCustomer类,以进行扩展。

这样,您可以拥有一个ProductReview来引用一个User ,该User可以是VendorCustomer ,或者只有您愿意时才可以引用Customer

有关Django文档的更多信息:扩展用户模型

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM