【问题标题】:Understanding many to many relationships: How can I choose the instances that belong to my Many to Many relationship field in django?ny了解多对多关系:如何在 django 中选择属于我的多对多关系字段的实例?
【发布时间】:2019-10-25 21:42:57
【问题描述】:

我有两个模型,我想将它们与多对多关系相关联。 BuildingGroupBuilding

我的想法是,例如 Building Group1 包含一些建筑物,而 BuildingGroup2 包含其他建筑物。

我认为我应该正确设置它,但它现在的工作方式是每个 BuildingGroup 始终包含我的所有建筑物。我无法删除建筑物并有选择地决定哪个建筑物属于哪个组。

这是我的模型:


class Building(models.Model):
    name  = models.CharField(max_length=120, null=True, blank=True)

    def __str__(self):
        return self.name


class BuildingGroup(models.Model):
    description           = models.CharField(max_length=500, null=True, blank=True)
    buildings             = models.ManyToManyField(Building, blank=True)

这是正确的设置方法吗?如果是这样,我该如何更改它,以便正确分组??

非常感谢任何帮助!

【问题讨论】:

    标签: django django-models django-rest-framework many-to-many


    【解决方案1】:

    你必须像下面这样改变你的数据库关系

    class Building(models.Model):
      name  = models.CharField(max_length=120, null=True, blank=True)
      group = models.ManyToMany(BuildingGroup, related_name="buildings")
    
      def __str__(self):
        return self.name
    
    
    class BuildingGroup(models.Model):
      name = models.CharField(max_length=500, null=True, blank=True)
    

    现在,像这样查询

    group = BuildingGroup.objects.get(pk=10) # just a random id
    rel_buildings = group.buildings.all()
    

    【讨论】:

    • 谢谢你,我的朋友!我明天试试这个,然后告诉你。仅出于我的理解:我实现了 m2m 关系,因为建筑物可以是许多 BuildingGroups 的一部分,而 BuildingGroup 可以有许多 Buildungs。为什么我不能用 m2m 做到这一点?或者为什么要使用普通的外键?
    • 因为不是m2m,是1-m。一个建筑群可以有多个建筑,但建筑不能有多个建筑群。
    • 嗯,一个建筑可以是多个建筑组的一部分......这不一样吗?
    • 我认为一定是m2m关系,因为我需要在BuildingGroup 1和2和3中存储例如building1
    • 如果是这种情况,那么您可以将ForeignKey 更改为ManyToMany。我会更新代码。
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 2019-11-28
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 2011-06-02
    • 2018-07-16
    相关资源
    最近更新 更多