我目前正在开发django 2.0.2管理页面。我有三张表,分别是“代谢物”、“基因”和“反应”。每个类的结构定义如下:
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'如您所见,“reaction”类还包括“代谢物”组件。一个典型的反应实际上涉及两种以上的代谢物。我想做的是,在管理页面(不是每个类的页面)上创建一个搜索栏,当我输入反应id时,搜索结果可以显示该反应和所有涉及的代谢物,当我输入代谢物时,搜索结果可以显示该代谢物的信息和该代谢物涉及的所有反应。
这有可能吗?有人能告诉我怎么做吗?
谢谢你对我的照顾!
发布于 2018-03-16 23:08:08
编辑:
这描述了实现这一点的“老派”方法。这似乎是django的多对多字段的一个用例。我在我的项目中没有遇到这种需求;所以,我还没有研究django中的多对多功能。我推荐阅读django文档,了解如何使用多对多字段。
这里描述的方法将在数据中实现所需的连接。但是,我怀疑使用多对多字段设置django admin会更容易、更直接。
结束编辑
您希望为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 migratehttps://stackoverflow.com/questions/49323188
复制相似问题