簡體   English   中英

連接這兩個Django模型的最佳方法是什么

[英]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.

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