加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Django manytomany:添加多个非唯一关系?

发布时间:2020-12-20 11:24:15 所属栏目:Python 来源:网络整理
导读:我正在构建一个将计算机的硬件组合在一起的应用程序.这是我第一次使用 django.说我有以下型号: class Memory(models.Model): partNum = models.CharField() capacity = models.CharField()class Computer(models.Model): name = models.CharField() memory
我正在构建一个将计算机的硬件组合在一起的应用程序.这是我第一次使用 django.说我有以下型号:

class Memory(models.Model):
    partNum = models.CharField()
    capacity = models.CharField()

class Computer(models.Model):
    name = models.CharField()
    memory = models.ManyToManyField(Memory)
    # also has cpus,hard drives,and motherboard,but focus on memory for now

一个内存对象可以属于许多计算机对象,一个计算机对象可以有许多内存对象 – 多对多.但是,如果使用多个计算机,计算机需要安装相同的精确记忆棒.

然而,django的manytomany字段(默认情况下?)只允许一个内存 – 计算机关系的实例,它必须是我独一无二的.有什么方法吗?

如果我在管理页面中尝试向计算机添加许多相同的内存对象,它会说“计算机内存与此计算机和内存的关系已经存在”.如果我尝试将同一个内存对象多次添加到manage.py shell中的服务器对象,则看起来只添加了一个内存对象.如果我尝试手动编辑数据库以具有重复条目,则会收到错误消息,指出该条目已存在.我看到在数据库结构中,某些“独特在一起”的索引是强制执行这一点.如果我改变了表来删除该子句,那会解决我的问题吗?除非django经理比预期的更愚蠢,否则可能不会.

我有什么选择?编写我自己的中间模型并使用through构造?但后来我不会使用酷的filter_horizo??ntal小部件!重写我的计算机模型以获得外键字段以及内存对象数字段?但是我不会得到ManyToMany API工具.救命!

解决方法

编辑:对不起,我没有充分阅读你的帖子,关于不想使用’通过’.

解决问题的一种方法是使用“通过”参数,您可以在其中手动指定用于多对多关系的中间模型.通过这种方式,你应该仍然拥有(大部分)Django提供的多对多设施.

然后中间模型可以计数(我发现管理比拥有多个关系更容易):

class Memory(models.Model):
    partNum = models.CharField()
    capacity = models.CharField()

class Computer(models.Model):
    name = models.CharField()
    memory = models.ManyToManyField(Memory,through='ComputerMemory')

class ComputerMemory(models.Model):
    memory = models.ForeignKey(Memory)
    computer = models.ForeignKey(Computer)
    count = models.IntegerField()

有关详细信息,请查看Django文档:https://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读