[英]What's the best way to connect these two Django models
在Django项目中,我有一个Companies模型,并且正在将ClinicalTrials模型(CT)组合在一起,目前两者都存储在SQlite3数据库中。 我最初的计划是在用户访问公司页面时查询CT.gov API中的company_name,并将结果存储在CT模型中,该模型将公司的主键从Companies模型映射到CT模型中的外键。
但是,当我开始研究它时,我已经意识到一个试验将有一个线索,并且可能有多个协作者,这将导致存储同一试验记录的多个副本。 因此,我想一次编写一次试用记录,然后将多个公司连接到该记录。
当我尝试将其他公司连接到试用版时,就会出现我的问题,这很简单,因为跟踪中的公司名称在我的公司模型中并不总是完全匹配(即我的公司表中company_name为“ Pharma Company Inc.”,合作者字段为“制药公司”)。
最好使用正则表达式搜索“公司”模型吗? 有更好的解决方案吗?
另外,在模型中存储多个外键的最佳方法是什么? 还是更好地建立一个辅助表? 这里不太确定...
更新为清楚起见添加代码
我的临床试验应用程序中的ClinicalTrial模型
class ClinicalTrials(models.Model):
pk = models.CharField(primary_key=True, max_length=50, blank=False, null=False)
involvement = models.CharField(max_length=100, blank=False)
current_trial_status = models.CharField(max_length=200, blank=True)
current_trial_status_date = models.DateField(null=True)
start_date = models.DateField(null=True)
start_date_type_code = models.CharField(max_length=200, blank=True)
completion_date = models.DateField(null=True)
completion_date_type_code = models.CharField(max_length=200, blank=True)
record_verification_date = models.CharField(max_length=200, blank=True)
brief_title = models.CharField(max_length=200, blank=True)
official_title = models.CharField(max_length=200, blank=True)
brief_summary = models.CharField(max_length=200, blank=True)
study_protocol_type = models.CharField(max_length=200, blank=True)
primary_purpose_code = models.CharField(max_length=200, blank=True)
lead_org = models.CharField(max_length=200, blank=True)
phase = models.CharField(max_length=200, blank=True)
minimum_target_accrual_number = models.CharField(max_length=200, blank=True)
number_of_arms = models.CharField(max_length=200, blank=True)
我的仪表板应用程序中的公司模型
class Company(models.Model):
stock_symbol = models.CharField(max_length=5, unique=False)
company_name = models.CharField(max_length=200)
address_1 = models.CharField(max_length=100, blank=True)
address_2 = models.CharField(max_length=100, blank=True)
city = models.CharField(max_length=25, blank=True)
state = models.CharField(max_length=2, blank=True)
zip_code = models.IntegerField(null=True)
country = models.CharField(max_length=25, blank=True)
只需在此处添加ClinicalTrials模型的相关部分:
class ClinicalTrials(models.Model):
...
lead_org = models.ForeignKey(Company)
...
collaborator = Models.ManyToManyField(Company)
...
然后,如果您想获取“ Pharma Company Inc.”的所有ClinicalTrial
对象, 是主角,您只需编写以下过滤器
ClinicalTrials.objects.filter(lead_org__name="Pharma Company Inc.")
如果要获取“ Pharma Company Inc.”的所有ClinicalTrial
对象, 是的合作者,您可以这样写:
ClinicalTrials.objects.filter(collaborator__name="Pharma Company Inc.")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.