簡體   English   中英

Django ManyToMany通過關系

[英]Django ManyToMany Through Relationship

我有以下標准

我有用戶模型,該模型本身是從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用戶模型的擴展版本。 我這樣做是因為我有兩種不同類型的配置文件,一種是賣方,另一種是買方。

我建議您嘗試通過擴展Django的用戶模型來嘗試( 請參閱docs

您的賣方將從您的用戶模型擴展:

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

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

您可以為您的類別創建ManyToMany關系( 請參閱docs ):

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)

但是我不確定這是否真的是您想要的。

如果只需要基本的用戶字段,例如; 名稱,電子郵件等,您可以按照@HendrikF的建議擴展Django的用戶模型;

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM