添加多对多关系会产生一个空的查询集

adding many to many relations is producing an empty queryset

我有一个名为 Occurrence 的模型,其中包含许多外键和多对多关系(我在这里只显示了几个字段)。在我使用 sqlalchemy 引擎将批量数据加载到我的 postgres (postgis) 数据库后,尝试创建与 Occurrence 实例的任何多对多关系时遇到问题。在上传数据之前,我可以像往常一样建立关系:

Occurrence.objects.get(ind='1010106').minmat.add(Material.objects.get(code='Li'))

然后我检查关系是否成功:

Occurrence.objects.get(ind='1010106').minmat.all()

其中 returns 所有关系的查询集。 我已经删除了数据库,并且在新的迁移之后一切正常,但是一旦我重新加载由多达 150,000 行的表组成的数据,我就无法再创建这些关系。没有错误发生,但是在 运行 add().

之后没有对模型实例疯狂添加

这是模型:

class Occurrence(models.Model):
    ind = models.CharField(max_length=14, blank=False, null=False, primary_key=True)
    minmat = models.ManyToManyField(Material, related_name="minmat_occurrence", blank=True,)
    geom = models.PointField(srid=4202) 

    def __str__(self):
        return self.ind


class Material(models.Model):
    code = models.CharField(max_length=6, primary_key=True)
    name = models.CharField(max_length=50, blank=False, null=False)
    category = models.ManyToManyField(MaterialCategory, related_name="category_material", blank=True)

    def natural_key(self):
        return self.name

在加载数据之前一切正常,所以我认为问题在于在 django 外部加载数据,但 django 的所有其他方面都照常工作。

我已经在这个问题上停留了一段时间,所以非常感谢任何帮助

因此,该问题与通过 table 由 django 管理的自动创建的多对多自动递增 id 列有关。对于上面的 minmat 字段,此 table 称为 gp_occurrence_minmat('gp' 是应用程序名称)。自动创建的 table 有三个字段;编号,occurrence_id & material_id。 id 字段是一个自动递增字段,这就是我的问题所在。我用这三列生成 table 和 pandas,然后用 to_sql 命令将它加载到数据库中。这样做时不会出现错误,查询数据时也不会出现问题,但是,如上所述,在尝试添加新关系时会出现问题。 我通过删除这些 table 的 id 列并仅使用 occurren_id 和 material_id 列将数据帧加载到数据库来解决了这个问题。 sql 自动生成 id 列,然后我可以成功地使用 add() 方法添加关系。