2016-12-09 7 views
0

私はテーブルVerticalsを持って、私はテーブルソースを持っています。 両方のテーブル要素の多対多の関係をマップする別のテーブルSources_Verticalsがあります。Djangoの多対多リレーションシップのデータ重複を防ぐには?

Image of Database Sources_verticlas table

このテーブルには、マッピングを示しています。 Paytm:それはそれを行っているよう 表はデータのduplicacyを許可してはならないeコマース、ホテル、旅行 Paytm:eコマース、旅行

どちらかそれはPaytm下あらかじめマッピングされた要素をマッピングするためのオプションを与えるべきではありません、ホテルを既存のレコードにマージする必要があります。

+0

テーブルフィールドは、あなたがしたくない重複セットも主キーです。または、すでにテーブルが存在する場合は、テーブルを保存する前にそのフィールドをクエリして、再度保存しないでください。 – metmirr

+0

私はここで少し明確にしましょう。 :::私は初めてpaytmオプションを選択します。私はeコマース、ホテル、旅行のオプションを取得する必要があります。 2 ::: eコマースとホテルを選択して保存するとします。 3 ::: Paytmを2回目に選択すると、旅行のオプションのみを取得する必要があります。 –

答えて

0

私が理解しているように、このようなものが必要です。これは良い解決策ではないかもしれませんが、あなたが必要なことを行うでしょう:

Verticals Sources   Sources_Verticals 
--------- -------   ----------------- 
Paymt  Ecommerce   Paymt - Ecommerce, Hotel 
      Hotel    Paymt - Travel 
      Travel 

# query Paymt to get id 
vertical = Verticals.objects.get(vertical_name='Paymt') 

# use Paymt id to get all record in Sources_Verticals table which related with Paymt 
source_ver = Sources_Verticals.objects.get(vertical_id=vertical.id) 

# all sources 
sources = Sources.objects.all() 

# iterate over sources to 
for source in sources: 
    # check which source not in the list 
    if source.id not in source_ver: 
     # save this source with Paymt 
     s = Sources_Verticals(vertical_id=vertical.id, source_id=source.id) 
     s.save() 
+0

これは、** paytm **だけでなく、すべてのソースに適用する必要があります。 ** Paytm **は単なる例でした。 –

+0

はい私は知っています。ちょうど私はあなたにする方法を示します。 'Sources_Verticals'モデルに' source_id'と 'vertical_id'を持っているとしましょう。すべての' Verticals'をチェックしたい場合は 'Sources_Verticals'と' Verticals'モデルを 'join'し、すべての垂直線を確認できます。 – metmirr

関連する問題