首先我的django知识是初级水平,所以请耐心等待我。 我面临一种模型关系,我不知道如何处理。我有3个模型:项目,位置和子位置。
项目可以有多个位置,每个位置可以有多个子位置。我在项目模型中有多个用于定位的字段,在子位置模型中有一个用于定位的外键字段。
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)
但是,该方法无法正常工作,因为您可以添加任何子位置,而不管添加的位置如何。我想要的是能够在创建项目时添加位置及其相关的子位置。
我通过阅读通用关系作为另一种可能的方法,但我仍然不知道如何将它拉下来。
答案 0 :(得分:1)
我认为如果你使用外键,你的情况会更容易,并且它很容易与django的_set
选项一起使用。
答案 1 :(得分:0)
答案 2 :(得分:0)
保留模型,并尝试在管理页面中使用内联。
所以,你的admins.py看起来像这样:
class SubLocationInline(admin.StackedInline):
model = SubLocation
@admin.register(Location)
class LocationAdmin(admin.ModelAdmin):
.....
inlines = [SubLocationInline]