2016-01-13 268 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) 
    ...