Django模型结构

Django模型结构,django,model,many-to-many,Django,Model,Many To Many,我正在创建一个简单的游戏数据库,我有一些问题 有两种模型:材质和建筑 class Material(Model): type = CharField(max_length=30) class Building(Model): cost = M2M(?) input = M2M(?) output = M2M(?) 在材质模型中,保存材质名称(木材、石头、铁、木板、鱼、食物等)。 建筑应该有更多的领域,然而,我遇到的困难只有这些。想象一下类似“定居者”的游戏。该

我正在创建一个简单的游戏数据库,我有一些问题

有两种模型:材质建筑

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

class Building(Model):
    cost = M2M(?)
    input = M2M(?)
    output = M2M(?)
在材质模型中,保存材质名称(木材、石头、铁、木板、鱼、食物等)。 建筑应该有更多的领域,然而,我遇到的困难只有这些。想象一下类似“定居者”的游戏。该建筑需要建造3块石头(成本),生产1块木板(产量)需要2块木材(投入)

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

我已经尝试使用through参数,但是,它不允许我在模型中出现3次或3次以上。

也许您的表可以有一个
数量
字段

编辑:

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

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)
也许您的表可以有一个
数量
字段

编辑:

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

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)

是的,可以,但似乎我不能在一个模型中通过同一个表添加多个相关字段…db.building:模型构建有两个通过模型ResourceQuantity手动定义的m2m关系,这是不允许的。请考虑在中介模型上使用一个额外的字段。顺便问一下,如何创建一个构建后的实例?是的,它可以,但是我似乎不能通过一个模型中的同一个表添加超过1个字段关联……dB.Guange:DigaBuffice通过模型资源库有两个手动定义的M2M关系,这是不允许的。请考虑在中介模型中使用一个额外的字段。顺便问一下,如何在以后创建一个构建实例?