2016-01-13 116 views
1

我有以下条件Django ManyToMany通过关系

其中我有用户模型,它自己扩展是从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的用户模型的扩展版本。我这样做是因为我有两种不同类型的配置文件,一个是卖家,另一个是买家。

回答

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):

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

或者想到一件事,您可能可以扩展您为您的帐户所做的事情_type_name:

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

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

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

+0

谢谢亨德里克。我的用户模型已经在Django User Model中进行了扩展。有两种类型的配置文件,卖方和买方使用用户模型,它本身是从Django用户模型扩展而来的。 – V1n0d

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) 
    ...