【问题标题】:correct structure for django modeldjango模型的正确结构
【发布时间】:2016-05-24 08:16:41
【问题描述】:

我尝试使用 django 模型存储以下 JSON 响应。每个赌注都可以有许多已下注的项目。在这种情况下,我们的用户“Nine”用两个项目下注:“Some Item Name”和“Another Item Name”

 {'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'}]

我创建了两个模型,一个用于投注,一个用于项目。

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']。这是一种低效的方式或存储我的数据,如果是,我该如何改进它?

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    引用你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.

    对于第二个问题,重复项目,如果您假设在一段时间内会有相同的项目重复下注,您可以尝试分离项目模型(从那里删除外键)并将项目作为Bet 模型中的一个 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)
    

    但这是基于这样的假设:rarityitem_id 对于一件物品来说总是相同的。

    【讨论】:

      猜你喜欢
      • 2012-01-07
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-26
      • 1970-01-01
      • 2010-09-20
      • 2013-11-23
      • 1970-01-01
      相关资源
      最近更新 更多