【问题标题】:Django ManyToManyField not present in Sqlite3Sqlite3 中不存在 Django ManyToManyField
【发布时间】:2013-04-09 02:35:21
【问题描述】:

我是 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 的数据,然后基于表单应用过滤器。但是当我执行syncdb 时,Blast 类的“序列”字段消失

在 Sqlite3 中:

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

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

【问题讨论】:

    标签: django sqlite manytomanyfield


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 谢谢,您的评论帮助了我。我真的以为 ManyToManyField 是数据库中的一列......谢谢丹尼尔!
      猜你喜欢
      • 2012-11-25
      • 1970-01-01
      • 2014-01-21
      • 2019-02-06
      • 1970-01-01
      • 2020-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多