我目前正在研究django 2.0.2管理页面。我有三张桌子,分别是代谢物,基因和#39;和#的反应。'每个类的结构定义如下:
class Genes(models.Model):
id = models.CharField(primary_key=True, max_length=255)
name = models.CharField(max_length=255, blank=True, null=True)
notes = models.CharField(max_length=255, blank=True, null=True)
class Meta:
managed = False
db_table = 'Genes'
class Metabolites(models.Model):
id = models.CharField(primary_key=True, max_length=255)
name = models.CharField(max_length=255, blank=True, null=True)
compartment = models.CharField(max_length=255, blank=True, null=True)
charge = models.CharField(max_length=255, blank=True, null=True)
formula = models.CharField(max_length=255, blank=True, null=True)
notes = models.CharField(max_length=255, blank=True, null=True)
class Meta:
managed = False
db_table = 'Metabolites'
class Reactions(models.Model):
id = models.CharField(max_length=255, primary_key=True)
name = models.CharField(max_length=255, blank=True, null=True)
metabolites = models.TextField(blank=True, null=True)
lower_bound = models.CharField(max_length=255, blank=True, null=True)
upper_bound = models.CharField(max_length=255, blank=True, null=True)
gene_reaction_rule = models.TextField(blank=True, null=True)
subsystem = models.CharField(max_length=255, blank=True, null=True)
notes = models.CharField(max_length=255, blank=True, null=True)
class Meta:
managed = False
db_table = 'Reactions'
正如您所看到的,“反应”反应如下:课堂上还包括代谢产物'零件。典型的反应实际上涉及两种以上的代谢物。我想要做的是,在管理页面上创建一个搜索字段(不是每个类的页面),当我输入反应ID时,搜索结果可以显示反应和所有涉及的代谢物,当我输入在代谢物中,搜索结果可以显示该代谢物的信息以及该代谢物所涉及的所有反应。
这可能吗?有人能告诉我怎么做吗?
感谢您帮助我!
答案 0 :(得分:0)
修改强>
这描述了实现这一目标的“老派”方式。这似乎是django的许多领域的用例。我没有在我的项目中遇到这种需要;所以,我还没有研究过django中的多对多功能。我建议阅读django文档,了解如何使用多个字段。
此处描述的方式将实现数据中所需的连接。但是,我怀疑使用多对多字段设置django管理员会更容易,更直接。
结束修改
你想为metabolites_in_reaction
创建另一个模型,它只包含自己的主键,反应的外键和代谢物的外键。
class ReactionMetabolites(models.Model):
reaction = models.ForeignKey(Reactions, on_delete=models.CASCADE)
metabolite = models.ForeignKey(Metabolites, on_delete=models.CASCADE)
这里也可能适合多对多的领域;我还没有真正想出多个领域。
编辑2:
在模型中进行这些更改后,您需要制作并应用迁移以将更改应用于数据库。
python manage.py makemigrations
python manage.py migrate