Django ManyToMany通过关系

时间:2016-01-13 08:54:06

标签: python django database-design django-models django-orm

我有以下条件

我有用户模型,它本身扩展来自Django用户模型。

Class User
   name = models.CharField()
   ...

用户在获得管理员批准后可以成为卖家。卖家模型就是这样。

Class Seller
    location = models.CharField()
    INDIVIDUAL = '1'
    COMPANY = '2'
    ACCOUNT_CHOICES = (
        (INDIVIDUAL, 'individual'), 
        (COMPANY, 'company'),
    )

    account_type_name = models.CharField(max_length=2,choices=ACCOUNT_CHOICES, default=INDIVIDUAL)

卖方可以属于任何二级或三级类别

Class Level1Category
    name = models.CharField()

Class Level2Category
    name = models.CharField()
    level1 = models.ForeignKey(Level1Category)

Class Level3Category
    name = models.CharField()
    level2 = models.ForeignKey(Level2Category)

当用户申请卖家帐户时,他必须选择级别2或级别3中的任何一个。这将是有效的模型架构。如何将类别模型与卖家链接,并将这两个模型与用户链接。

修改

我的用户模型已经是Django用户模型的扩展版本。我这样做是因为我有两种不同类型的资料,一种是卖方,另一种是买方。

2 个答案:

答案 0 :(得分:0)

我建议您尝试扩展Django的用户模型(see docs

您的卖家会延伸到您的用户模型:

class User(models.Model):
    name = models.CharField()
    ....

class Seller(models.Model):
   user = models.OneToOneField(User, on_delete=models.CASCADE)
   location = models.CharField()
   ...

您可以为类别(see docs)创建ManyToMany关系:

class Category(models.Model):
    name = models.CharField()
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    ...

或者有一件事可以想到,您可以扩展您为account_type_name所做的工作:

LEVEL_CATEGORY = (
    (1, 'Level 1'), 
    (2, 'Level 2'),
    (3, 'Level 2'),
)

level_category = models.CharField(choices=LEVEL_CATEGORY, default=1)

但我不确定这是否真的是你想要做的。

答案 1 :(得分:0)

如果您只需要基本的用户字段,例如;姓名,电子邮件等,你可以扩展Django的用户模型,因为@HendrikF建议;

class Seller(models.Model):
   user = models.OneToOneField(User, on_delete=models.CASCADE)
   location = models.CharField()
   ...

如果您需要自定义用户模型,我建议您使用Django AbstractUser;

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    consumer = models.ForeignKey('Consumer', null=True, blank=True)
    ...
相关问题