2017-10-18 125 views
1

在Django项目中,我有一个公司模型,并将一个ClinicalTrials模型(CT)放在一起,这两个模型现在都存储在SQlite3数据库中。我最初的计划是当用户访问公司页面并将结果存储在CT模型中,将公司的主键从公司模型映射到CT模型中的外键时,查询CT.gov API的company_name。什么是连接这两个Django模型的最佳方式

当我开始研究它时,我意识到审判会有领先,并且可能有多个合作者,这会导致存储同一试验记录的多个副本。所以,我想写一次试验记录,然后将多家公司联系起来。

当我尝试到其他公司连接到审判,简单,因为在跟踪该公司的名称并不总是在我的公司模型的精确匹配我的问题出现(即我公司表具有COMPANY_NAME列为“制药公司公司。“,合作者领域是”制药公司“)。

最好是使用正则表达式搜索公司模型?有更好的解决方案吗?

此外,在模型中存储多个外键的最佳方式是什么?或者更好地建立一个帮助表?真的不知道这里...

更新 添加代码为清楚起见

在我clincialtrial应用在我的仪表板

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) 

公司模型ClinicalTrial模型应用

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) 
+0

当你用英语解释你的模型时,很难理解。如果您可以发布模型的相关部分,应该会更有帮助。无论如何,从我的理解,你需要在模型之间创建一个ManyToMany关系而不是ForeignKey。 – anupsabraham

+0

我之前没有使用ManyToMany关系,但似乎是正确的方式来连接它们。只需要弄清楚如何查找不完全匹配的公司名称...... – pheeper

+0

我想你还没有在你的问题中添加你提到过的'协作者'字段。将'lead_org'字段更改为ForeignKey并将'collaborator'字段添加为'公司'模型的ManyToMany关系应该适合您。 – anupsabraham

回答

2

刚在这里添加您的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.") 

如果你想获取所有ClinicalTrial对象“制药公司公司”是一位合作者,你可以这样写:

ClinicalTrials.objects.filter(collaborator__name="Pharma Company Inc.") 
相关问题