【问题标题】:How to return all the intere connected multiple items from a Django model using a query set?如何使用查询集从 Django 模型中返回所有关联的多个项目?
【发布时间】:2020-09-15 06:29:19
【问题描述】:

我有一个如下所示的数据,第一列蛋白质 ID 第二列肽序列和第三列一些值我创建了一个 Django 模型来存储这些数据。

数据表:

A0A075B6K4  YELTQPPSVSTAR   60,10
A0A075B6K4  SYELTQPPSVTAR   2
A0A075B6Q5  EVQLVESGEGSLR   7
A0A075B6S5  DIQMTQSPSGDR    10
A0A0A0MRZ8  EIVLTQSPGER 30,20
A0A0B4J1V0  EVQLVESGGSLR    10
A0A0B4J1X5  EVQLVESGGSLR    0
A0A0B4J2D9  AIQLTQSPSGDR    0
A0A0C4DH42  EVQLVESGGSLR    0
A0A0C4DH55  EIVMTQSPGER 10
A0A0C4DH42  YELTQPPSTAR 20
A0A0C4DH55  YELTQPPSTAR 4
A0A0B4J1X5  YELTQPPSTAR 12

Django 模型:

from django.db import models

# Create your models here.


class ProteinID(models.Model):
    ProtID = models.CharField(max_length=30)

    def __str__(self):
        return "%s" % (self.ProtID)

class PeptideSeq(models.Model):
    sequence = models.CharField(max_length=100)
    feq = models.CharField(max_length=100)
    protein = models.ForeignKey(ProteinID, on_delete=models.CASCADE)

    def __str__(self):
        return "%s %s" % (self.sequence, self.feq)

    class Meta:
        ordering = ['sequence']

详情:

正如我们在表中看到的,单个蛋白质 ID 可以包含多个肽序列,单个肽可以与多个蛋白质 ID 相关联。

我想添加两个搜索选项:

  1. 如果输入的蛋白质 ID 作为查询,它应该返回所有相关的肽段和第三列中的值

查询 A0A0C4DH55 应该返回

YELTQPPSTAR 4
EIVMTQSPGER 10
  1. 或者作为查询输入的肽序列,它应该从第三列返回所有相关的蛋白质 ID 和值。

查询 EVQLVESGGSLR 应该返回

A0A0B4J1V0 10
A0A0B4J1X5 0
A0A0C4DH42 0

如何实现?

谢谢

【问题讨论】:

    标签: django django-models django-rest-framework django-forms django-views


    【解决方案1】:

    1。 ProteinID.objects.get(id='A0A0C4DH55').peptideseq_set.all()

    2。 PeptideSeq.objects.filter(sequence='EVQLVESGGSLR').values('protein__ProtID', feq)

    【讨论】:

      【解决方案2】:

      不要让 proteinID 在您的肽模型中成为外键,而是在蛋白质和肽模型之间建立多对多关系。这样,一个蛋白质就会有多个肽段,一个肽段可以属于多个蛋白质。

      您可以像这样获取与蛋白质相关的所有肽

      protein = ProteinID.objects.get(ProtID=1)
      peptides = protein.peptide_set.all()
      

      同样的方法你也可以得到正弦肽的蛋白质。

      https://docs.djangoproject.com/en/3.0/topics/db/examples/many_to_many/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多