您好我的模特中有以下情况:
class Package(models.Model):
name
class SetOfItems(models.Model)
name
class Item(models.Model):
package(FK)
setofitems(FK)
我想解决的问题是简化SetOfItems的查询。例如。如果我需要从SetOfItems获取包名,我需要写类似的东西 SetOfItems.objects.values('item__package__name'),实际上不起作用,在管理站点中很好(例如,如果我在那里创建一个额外的字段)。
所以我要找的是在SetOfItem模型中存储有关Packages的信息而不建立直接的关系(因为我认为如果我将FK放在那里,数据完整性会受到影响,例如,它可能会在包内的Item和另一个在SetOfItems中)..
所以也许有可能有SQL视图,或类似的东西......有一个表列自动从其他表预填充?或其他什么?
答案 0 :(得分:1)
Item是Package和SetOfItems之间多对多关系的直通表。所以你应该这样声明:
class SetOfItems(models.Model):
packages = models.ManyToManyField(Package, through='Item')
这根本不会改变您的实际表结构,但它允许您执行my_package.setofitems.all()
。