我正在构建一个将计算机硬件组合在一起的应用程序。这是我第一次使用 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_horizontal 小部件!重写我的计算机模型以具有外键字段加上内存对象数量的字段?但是我不会得到 ManyToMany API 工具。帮助!