2017-10-18 6 views
1

Djangoプロジェクトでは、私はCompaniesモデルを持ち、ClinicalTrialsモデル(CT)を作成しています。両方ともSQlite3データベースに格納されています。私の最初の計画は、ユーザーが会社のページにアクセスしてCTモデルに会社の主キーを企業モデルからCTモデルの外部キーにマッピングした結果を保存するときに、CT.gov APIにcompany_nameを照会することでした。これらの2つのDjangoモデルを接続する最良の方法

私はそれをうまくやっていきますが、私は試してリードし、同じ試行記録の複数のコピーを格納する複数のコラボレーターを持つことができることに気づいた。だから、私は試行記録を一度書いてから、複数の企業を記録に結びつけたいと思っています。

私の問題は、私の会社のモデル(すなわち、私の会社のテーブルにcompany_nameが "Pharma Company Inc"と表示されているので、 」、共同事業者フィールドは「Pharma Company」)。

正規表現を使用してCompaniesモデルを検索するのが最も良いですか?より良い解決策はありますか?

また、複数の外部キーをモデルに格納するにはどうすればよいでしょうか?ヘルパーテーブルを作る方が良いですか?そうでもないことを確認ここでは...

更新 ちょうど私のダッシュボードでの私のclincialtrialのApp

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) 

会社のモデルのApp

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

あなたのモデルをちょうど英語で説明すると、分かりにくいです。モデルの関連部分を投稿できる場合には、より役立つはずです。とにかく、わかったことから、ForeignKeyの代わりにモデル間のManyToMany関係を作成する必要があります。 – anupsabraham

+0

以前はManyToMany関係を使用していませんが、それはそれらを接続する正しい方法のようです。ただ正確に一致しない会社名を調べる方法を理解する必要があります。 – pheeper

+0

質問にあなたが言及した 'collaborator 'フィールドをまだ追加していないと思います。 'lead_org'フィールドをForeignKeyに変更し、' Company'モデルにManyToMany関係として 'collaborator'フィールドを追加すると、あなたのために働くはずです。 – anupsabraham

答えて

2

を明確に

ClinicalTrialモデルのコードを追加しますClinicalTrialsモデルの関連部分をここに追加してください:

class ClinicalTrials(models.Model): 
    ... 
    lead_org = models.ForeignKey(Company) 
    ... 
    collaborator = Models.ManyToManyField(Company) 
    ... 

さらに、「Pharma Company Inc.」のオブジェクトをすべて取得する場合は、リードで、あなただけの

ClinicalTrials.objects.filter(lead_org__name="Pharma Company Inc.") 

を以下のフィルタを記述する必要がありますそして、あなたは「製薬会社株式会社」ことをすべてClinicalTrialオブジェクトを取得したい場合

ClinicalTrials.objects.filter(collaborator__name="Pharma Company Inc.") 
関連する問題