1

我是 Django 新手,我对多对多关系有一些问题。我从事blastn自动化工作,这是我的课程:

class Annotation(models.Model):
   sequence = models.IntegerField()
   annotation = models.TextField()
   start = models.IntegerField()
   end = models.IntegerField()

class Blast(models.Model):
    sequence = models.ManyToManyField(Annotation, through="AnnotBlast")
    expectValue = models.IntegerField()

class AnnotBlast(models.Model):
    id_blast = models.ForeignKey(Blast, to_field="id")
    id_annot = models.ForeignKey(Annotation, to_field="id")

class Hit(models.Model):
    id_hit = models.ForeignKey(Blast, to_field="id")
    length = models.IntegerField()
    evalue = models.IntegerField()
    start_seq = models.IntegerField()
    end_seq = models.IntegerField()

在一个视图中,我想通过这个多对多字段从模型的其余部分访问 Annotation 的数据,然后基于表单应用过滤器。但是当我做 a 时syncdb,Blast 类的“序列”字段消失了

在 Sqlite3 中:

.schema myApp_blast
CREATE TABLE "myApp_blast" (
   "id" integer not null primary key,
   "expectValue" integer not null
);

所以我无法根据需要在此表中加载数据。我不明白为什么这个字段会在同步数据库中消失。如何将第一类链接到其他类(然后能够在模板中合并数据)?

4

2 回答 2

1

ManyToManyField 本身并不是数据库中的列。它仅由连接表中的一个元素表示,您在此处明确定义为 AnnotBlast(请注意,由于您没有在关系上定义任何额外字段,因此您实际上不需要定义一个直通表 - Django 会如果你没有自动完成)。

因此,要将数据添加到您的模型,您需要将数据添加到 AnnotBlast 表,指向相关的 Blast 和 Annotation 行。

于 2013-04-16T22:36:50.567 回答
0

对于多对多关系,会创建一个中间连接表,请参阅此处的文档:https ://docs.djangoproject.com/en/1.2/ref/models/fields/#id1

于 2013-04-16T17:41:58.270 回答