Django模型结构

时间:2011-11-27 10:17:57

标签: django model many-to-many

我正在创建一个简单的游戏数据库,我遇到了一些问题。

有两种型号:材料建筑

class Material(Model):
    type = CharField(max_length=30)

class Building(Model):
    cost = M2M(?)
    input = M2M(?)
    output = M2M(?)

在材料模型中,保留材料名称(木材,石材,铁,木板,鱼,食品等)。 建筑应该有更多的领域,但是,我只遇到这些困难。想象一下像“The Settlers”这样的游戏。该建筑需要建造3块石头(成本),需要2块木材(输入)来生产1块木板(输出)。

我如何制作这样的结构,我可以指定材料的数量,并在必要时轻松修改它。

我已经尝试通过参数使用,但是,它不允许我在模型中出现3次或更多次。

1 个答案:

答案 0 :(得分:1)

也许您的through表格可能有quantity字段?

修改

啊,我明白了。由于表格的工作方式,这是一个限制。直通表仅引用它们连接在一起的两个模型,但无法知道所述模型上的哪些字段定义了m2m关系。因此每个直通表只能用于一个关系。但是,对于某些abstract subclassing,我们可以保持代码相当干净:

class BuildingMaterialBase(models.Model):
    material = models.ForeignKey('Material')
    building = models.ForeignKey('Building')
    quantity = models.IntegerField()

    class Meta:
        abstract = True

class BuildingMaterialIn(BuildingMaterialBase):
    pass

class BuildingMaterialOut(BuildingMaterialBase):
    pass


class Building(models.Model):
    in_ = models.ManyToManyField(Material, through=BuildingMaterialIn)
    out_ = models.ManyToManyField(Material, through=BuildingMaterialOut)