【发布时间】:2015-04-16 20:07:11
【问题描述】:
首先我的 django 知识是初学者水平,所以请耐心等待。 我面临着我不知道如何处理的模范关系。我有 3 个模型:项目、位置和子位置。
一个项目可以有多个位置,每个位置可以有多个子位置。我在 Project 模型中有一个多对多的位置字段,在 Sublocation 模型中有一个用于位置的外键字段。
class Project(models.Model):
...
locations = models.ManyToManyField(Location)
class Location(models.Model):
name = models.CharField(max_length=250, unique=True)
class SubLocation(models.Model):
location = models.ForeignKey(Location)
name = models.CharField(max_length=100, unique=True)
在 django admin 中,我可以在创建项目时添加多个位置(使用 filter_horizontal)。但是,我还需要根据为正在创建的项目添加的位置来选择子位置的选项。我不知道如何使用上述方法。
然后我从项目模型中删除了多对多字段的位置,并尝试了以下方法。
我创建了一个 ProjectLocation 模型并将其作为内联添加到 Project ModelAdmin 中,以便能够在创建项目时添加位置和子位置。模型如下所示:
class ProjectLocation(models.Model):
project = models.ForeignKey(Project)
location = models.ManyToManyField(Location)
sublocations = models.ManyToManyField(SubLocation)
但是,该方法无法按预期工作,因为您可以添加任何子位置,而不管添加的位置如何。我希望能够在创建项目时添加位置及其相关子位置。
我通读了泛型关系作为另一种可能的方法,但我仍然不知道如何实现它。
- 以我的模型结构,这可能吗?
- 如果为真,我应该怎么做才能得到想要的结果?
- 如果为 False,请建议我如何更改它。
【问题讨论】:
标签: python django django-models django-admin