python - Django中多个用户相互依赖的问题
问题描述
我正在使用Django中的一些定制用户模型。它们是:
myCustomeUser
负责用户的主要身份Industry
是一个将链接OneToOneField
到myCustomeUser
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
. 还有一些条件:
- 它应该包含
name
,National ID
,gmail
,rank
,employee_varified
, 命名字段 - 这将继承
myCustomeUser
和Industry
两者 Industry
账户用户将主要录入数据库中的所有数据,Employee
除了username
和password
(继承自myCustomeUser
)- 稍后,
Employee
将搜索他的National ID
给定,Industry
并通过创建他的和来完成注册username
过程password
。
我试过这样的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
(这意味着username
和password
),但是Industry
用户需要在完成注册Employee
之前输入他们的数据。Employee
我怎样才能写我的Employee
模型来解决这个问题?
解决方案
如果您无法保证在创建对象时会存在相关对象,则可以将关系设为可选。
所以在你的情况下,我会创建你的模型更像;
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 的一两件事
推荐阅读
- python - 快速傅里叶变换。频率和时间样本之间的相关性
- reactjs - 无法从 SWR 获取访问我的数据 - React
- apache-beam - Dataflow-Apache 梁插入到 ReplicatedReplacingMergeTree
- javascript - Rails 使用方法从一个 js 文件到另一个 js 文件
- sql - sp_msforeachtable 不可用:获取表名 + min(value) + max(value)
- python - 将列表的数据与其最后一个值配对
- javascript - 将依赖注入 Vuex 模块
- flutter - 如何使用 charts_flutter 包在 Flutter 中显示工具提示
- redhat - 如何在 Redhat 的 3scale 中将门户工件从一个环境移动到另一个环境
- node.js - 如何保存数组?