首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >想要在django管理页面中实现多个表的搜索功能

想要在django管理页面中实现多个表的搜索功能
EN

Stack Overflow用户
提问于 2018-03-16 22:31:17
回答 1查看 116关注 0票数 0

我目前正在开发django 2.0.2管理页面。我有三张表,分别是“代谢物”、“基因”和“反应”。每个类的结构定义如下:

代码语言:javascript
复制
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时,搜索结果可以显示该反应和所有涉及的代谢物,当我输入代谢物时,搜索结果可以显示该代谢物的信息和该代谢物涉及的所有反应。

这有可能吗?有人能告诉我怎么做吗?

谢谢你对我的照顾!

EN

回答 1

Stack Overflow用户

发布于 2018-03-16 23:08:08

编辑:

这描述了实现这一点的“老派”方法。这似乎是django的多对多字段的一个用例。我在我的项目中没有遇到这种需求;所以,我还没有研究django中的多对多功能。我推荐阅读django文档,了解如何使用多对多字段。

这里描述的方法将在数据中实现所需的连接。但是,我怀疑使用多对多字段设置django admin会更容易、更直接。

结束编辑

您希望为metabolites_in_reaction创建另一个模型,该模型只包含自己的主键、反应的外键和代谢物的外键。

代码语言:javascript
复制
class ReactionMetabolites(models.Model):
    reaction = models.ForeignKey(Reactions, on_delete=models.CASCADE)
    metabolite = models.ForeignKey(Metabolites, on_delete=models.CASCADE)

多对多字段在这里可能也是合适的;我还没有真正弄清楚多对多字段。

编辑2:

在模型中进行这些更改后,您将需要进行迁移并应用迁移,以将更改应用到数据库。

代码语言:javascript
复制
python manage.py makemigrations
python manage.py migrate
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49323188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档