在已经存在的ManyToMany中实施“通过”

问题描述

我正在处理这种复杂的情况,但我不确定如何进行。

上下文

我有这种情况:

x,y,z = vectorized_normed_right
p_i_right = [fu * (x / z) + cu,fv * (y / z ) + cv]

这种关系是传统的关系,生产中已经有数据。

问题

出现了新的限制,其中class Cat(models.Model): treats = models.ManyToManyFields(Treat) class Treat(models.Model): name = models.CharField() 模型必须移至新的数据库。 简而言之,这意味着我必须将对待与猫的约束与猫分开。

提案

有人告诉我,鉴于我的情况,我别无选择,只能实现一个自定义的中间模型以保留m2m,但也允许使用Treat。这个建议是这样的:

db_constraint=False

在我的本地堆栈中,运行迁移后,我发现自己无法访问数据。

class Cat(models.Model):
   treats = models.ManyToManyFields(Treat,through=CatTreat,related_name="cats")

class Treat(models.Model):
   name = models.CharField()

class CatTreat(models.Model):
   cat = models.ForeignKey(Cat)
   treat = models.ForeignKey(Treat,db_constraint=False)

我不确定新的直通访问是否配置正确,或者是否无意中删除了数据。感谢您提供任何见识。

解决方法

事实证明还需要更多配置。

在穿透表中,这不存在:

class CatTreat(models.Model):
   cat = models.ForeignKey(Cat)
   treat = models.ForeignKey(Treat,db_constraint=False)
  
   class Meta:
     db_column = "table_name"


cat.treats.all()
# => [...]

就是这样!为了避免丢失任何数据,我不得不将迁移工作视为伪造。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...