簡體   English   中英

Django 用戶模型(員工和客戶)

[英]Django user model (Employee and Customer)

我目前正在開發一個涉及兩種類型用戶的移動應用交付系統:“員工”和“客戶”。 每種類型的用戶在應用程序中都有不同的視圖和權限。 此外,如果您願意,每種類型的用戶都會有自己的“個人資料”。 員工的個人資料目的主要是指定公司角色。 客戶資料主要用於保存送貨地址。

我正在嘗試就實現此類目標的最佳實踐獲得一些意見。 我無法決定使用 AbstractBaseUser 還是 AbstractUser 是否更好。

下面是我想要創建的模型及其關系的視覺效果:

用戶模型的可視化

下面是我模擬的 user/models.py 文件:

class User(AbstractBaseUser):
    USER_TYPES = (
        ('Employee', 'employee'),
        ('Customer', 'customer')
    )
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    email = models.EmailField()
    phone_number = models.CharField(max_length=20)
    user_type = models.CharField(max_length=8, choices=USER_TYPES)

    def __str__(self):
        return f'{self.first_name} {self.last_name}'


# if user.user_type == 'Employee'
class EmployeeProfile(models.Model):
    EMPLOYEE_ROLES = (
        ('Driver', 'driver'),
        ('Production', 'production'),
        ('Manager', 'manger')
    )
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    role = models.CharField(max_length=12, choices=EMPLOYEE_ROLES)

    def __str__(self):
        return self.user


# if user.user_type == 'Customer'
class CustomerProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    company = models.CharField(max_length=100)
    address = models.CharField(max_length=100)
    address_2 = models.CharField(max_length=100)
    city = models.CharField(max_length=50)
    state = models.CharField(max_length=2, help_text="State Abbreviation (ex: OH)")
    zipcode = models.CharField(max_length=5)

    def __str__(self):
        return self.user

我知道我還需要使用 Django 信號或類似的東西來創建用戶配置文件(對於員工或客戶,在用戶創建時)。

您的代碼有效但是根據設計模式標准,可以說在名為 is_employee 的用戶中放置了一個布爾字段,兩種類型的用戶的所有信息都應該在 AbstractUser 中,但具有 null=True 和 blank=True 值。 這樣你就有了一個用戶,它可以用 is_employee 字段分隔我希望它有用

暫無
暫無

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

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