首页 > 解决方案 > Django中多个用户相互依赖的问题

问题描述

我正在使用Django中的一些定制用户模型。它们是:

  1. myCustomeUser负责用户的主要身份
  2. Industry是一个将链接OneToOneFieldmyCustomeUser
  3. Employee是另一个用户帐户,它将 FK 到myCustomeUser和 FK 到Industry

我的models.py

class myCustomeUser(AbstractUser):
    id = models.AutoField(primary_key=True)
    username = models.CharField(max_length=20, unique="True", blank=False)
    password = models.CharField(max_length=20, blank=False)
    is_Employee = models.BooleanField(default=False)
    is_Industry = models.BooleanField(default=False)

class Industry(models.Model):
    user = models.OneToOneField(myCustomeUser, on_delete=models.CASCADE, primary_key=True, related_name='industry_releted_user')
    name = models.CharField(max_length=200, blank=True)
    owner = models.CharField(max_length=200, blank=True)
    license = models.IntegerField(null=True, unique=True)
    industry_extrafield = models.TextField(blank=True)

现在我需要编写Employee. 还有一些条件:

我试过这样的Employee模型:

class Employee(models.Model):
    user = models.ForeignKey(myCustomeUser,primary_key=True, null=True, on_delete=models.CASCADE)
    industry = models.ForeignKey(Industry, on_delete=models.CASCADE)
    National_ID = models.IntegerField(null=True, blank=False, unique=True)
    name = models.CharField(max_length=200, blank=False, null=True)
    gmail = models.EmailField(null=True, blank=False, unique=True)
    rank = models.CharField(max_length=20, blank=False, null=True)
    employee_varified = models.BooleanField(default=False, blank=True, null=True)

但是这个模型的问题是我不能在Employee没有给出的情况下创建任何对象user(这意味着usernamepassword),但是Industry用户需要在完成注册Employee之前输入他们的数据。Employee

我怎样才能写我的Employee模型来解决这个问题?

标签: pythondjango

解决方案


如果您无法保证在创建对象时会存在相关对象,则可以将关系设为可选。

所以在你的情况下,我会创建你的模型更像;

class Employee(models.Model):
    user = models.ForeignKey(
        myCustomeUser,
        blank=True,
        null=True,
        on_delete=models.CASCADE
    )
    industry = models.ForeignKey(
        Industry,
        blank=True,
        on_delete=models.CASCADE
    )
    national_id = models.IntegerField(
        null=True,
        blank=False,
        unique=True
    )
    name = models.CharField(
        max_length=200,
        blank=False,
        null=True
    )
    # ... etc

您还可以从以下站点中受益,该站点可能会帮助您了解有关 django 的一两件事

https://www.django-antipatterns.com/


推荐阅读