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

时间:2015-05-20 04:30:42

标签: python django

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

AUTH_USER_MODEL = 'userprofile.User'

在此之后,我创建了 用户 作为抽象类,因为我想要从这个类派生两个单独的类,即 - 供应商 客户 。这将创建两个单独的数据库表。

当我创建另一个类 - ProductReview 时,会出现问题。此类需要为添加评论的用户提供外键,此用户可以是 供应商 客户 。我不知道如何在此处设置此外键约束,因为 settings.AUTH_USER_MODEL 将无效,因为 用户 是一个抽象类。

以下是类结构:

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)

编辑 - 我为每个模型提供了三个不同的表格。

2 个答案:

答案 0 :(得分:0)

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

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

然后创建一个查询以检查原始Vendor的模型CustomerUSER

答案 1 :(得分:0)

对于您的情况,我会考虑更改我的建模。我将如何做到这一点:

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

通过这种方式,您可以ProductReview引用User,可以是VendorCustomer,也可以引用{{} 1}}只有你愿意。

有关Django documentation: Extending the User model的更多信息,请参阅