2016-05-24 5 views
0

私はdjangoモデルで保存しようとしている次のJSON応答を持っています。各賭けには、賭けられた多数のアイテムがあります。この場合には、当社のユーザーナイン 'は、2つの項目にベットを置くました:「いくつかのアイテム名」と「他の項目名」djangoモデルの正しい構造

{'bet_id' : 234442288 
'user_id': 5554433 
'user_name': 'Nine' 
'item': [{'name': 'Some Item Name', 
      'item_id': 10, 
      'rarity': 'Common'}, 
      {'name': 'Another Item Name', 
       'item_id': 19, 
       'rarity': 'Rare'}] 

私は2つのモデル、賭けのための1、および項目のための1つを作成しました。

class Bet(models.Model): 
    bet_id = models.IntegerField() 
    user_id = models.IntegerField() 
    user_name = models.CharField(max_length=200) 

class Item(models.Model): 
    bet = models.ForeignKey(Bet) 
    item_id = models.IntegerField() 
    name = models.CharField(max_length=200) 
    rarity = models.CharField(max_length=200) 

目標は、どの項目を賭けており、合計で賭けてきたどのように多くの項目を知っている正確に誰が知っていることができるようにすることです。問題は、私は今多くの重複アイテムを保管しているということです。 Items.objects.all()は、例えば、['Some Item Name'、 'Some Item Name'、 'Another Item Name']を返します。これは非効率的な方法ですか、私のデータを保管していますか?もしそうなら、どうすれば改善できますか?あなたが繰り返し一定の期間にわたって賭けることになる同じ項目がありますことを前提とした場合に第二の懸念のためにあなたにThe goal is to be able to know exactly who has bet which items and to know how many items have been bet in total.

を引用する

答えて

0

は、重複項目で、あなたはおそらく削除(個別の項目モデルに試すことができますそこからの外部キー)と、ベットモデルのM2Mフィールドとしての項目があります。あなたは、彼らがすでに存在しているかどうかをチェックすることで、それらを作成する前に、アイテムの重複を避けることができ

  • を次のようにこのことで何を達成することができますことは何かです。

あなたは、おそらくこの

class Item(models.Model): 
    item_id = models.IntegerField() 
    name = models.CharField(max_length=200) 
    rarity = models.CharField(max_length=200) 


class Bet(models.Model): 
    bet_id = models.IntegerField() 
    user_id = models.IntegerField() 
    user_name = models.CharField(max_length=200) 
    items = models.ManyToManyField(Item) 

ような何かにあなたのモデルを変更すると考えることができますが、これは希少のitem_idは常に項目について同じになるという仮定に基づいています。

関連する問題