2017-06-26 11 views
1

を追加するには、私は次のことを実現する方法を見つけることができません。ジャンゴ:他のモデルから事前移入フィールドまたは手動

  • 候補(FIRST_NAME、LAST_NAME、brith_date)
  • は、次の2つのモデルを持っていると言います

  • デベロッパー(first_name、last_name、birth_date、team_name、salary、...)

候補者は外部の企業が採用しています。毎朝、すべてのアクティブな候補のデータをリストしたCSVファイルをリフレッシュします。 CsvファイルをDjango候補モデルに同期させるcronジョブもあります。管理者がチームに新しい開発者を追加したいとき

今、彼はことができるようになります。

  • デベロッパーテーブルに候補モデルと「コピー」の個人データから候補を選択します。チーム名、給与およびその他のフィールドが手動で追加されます
  • 開発者が外部求人企業を経由せずに募集された場合、管理者は個人情報を手動で追加することができます。

私はDevelopersモデルで候補の1対1を参照することができましたが、候補リストにはアクティブな開発者も含まれているため、リクルーティングツールのcsvファイルに同期できないという欠点があります。個人データを候補者モデルから開発者モデルにコピーするか、手動で追加することを任意に選択することをお勧めします。

これを行う方法に関するご意見は大変ありがとうございます。

答えて

1

これはmulti-table inheritanceに最適です。

例:あなたはそれを見ることができるように

class Person(models.Model): 
    first_name = models.CharField(max_length=32) 
    last_name = models.CharField(max_length=64) 
    dob = models.DateField() 


class CandidateManager(models.Manager): 
    def get_queryset(self): 
     return super(CandidateManager, self).get_queryset().filter(
      is_hired=False 
     ) 

class Candidate(Person): 
    cv = models.TextField() 
    is_hired = models.BooleanField(default=False, editable=False) 
    objects = CandidateManager() 

    def hire(self, update=False): 
     self.is_hired = True 
     if update: 
      self.save(update_fields=['is_hired']) 

class DeveloperManager(models.Manager): 
    def get_queryset(self): 
     return super(DeveloperManager, self).get_queryset().filter(
      is_hired=True 
     ) 


class Developer(Candidate): 
    team_name = models.CharField(max_length=32) 
    objects = DeveloperManager() 

はかなり自分自身を書き込み、あなたはDjangoのバックエンドでこれを行う、またはそれのためのビューを作成するためのカスタムAdminActionを書くことができます。

+0

私が必要としているように見えますが、試してみます。テーブル継承は私には新しく、そこに私を指摘してくれてありがとう。 – DeBaze

+0

まだ1つの質問:Add Developerビューのドロップダウンを希望します。候補オブジェクトから追加するか、手動で入力するかを選択できます。どのようにそれを行う上の任意のアイデアですか?再度、感謝します! – DeBaze

+0

組み込みの管理者では? – Melvyn

関連する問題