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关系,这是不允许的。请考虑在中介模型中使用一个额外的字段。顺便问一下,如何在以后创建一个构建实例?