想在Django管理页面中实现多表的搜索功能吗

2024-05-16 10:38:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在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'

如您所见,“反应”类还包括“代谢物”成分。一个典型的反应实际上涉及两种以上的代谢物。我想做的是,在管理页面(不是每个类的页面)上创建一个搜索字段,当我键入反应id时,搜索结果可以显示反应和所有涉及的代谢物,当我键入代谢物时,搜索结果可以显示该代谢物的信息和该代谢物涉及的所有反应。你知道吗

有可能吗?有人能告诉我怎么做吗?你知道吗

谢谢你帮助我!你知道吗


Tags: keynameidtruemodelmodels页面null
1条回答
网友
1楼 · 发布于 2024-05-16 10:38:01

编辑:

这描述了实现这一点的“老派”方式。这似乎是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

相关问题 更多 >