关于单一模型的Django一对多关系

时间:2015-05-26 19:35:41

标签: python django django-admin

我正在尝试使用部分获取django模型。每个部分可以有一个或没有超级部分,每个部分可以有许多子部分。这是我的模特

class Section(models.Model):
    section_name = models.CharField(max_length=100)
    sub_sections = models.ForeignKey('self', related_name='super_section', null=True)
    links = models.ForeignKey('Link')

    def __str__(self):
        return self.section_name

class Link(models.Model):
    link_adress = models.URLField(max_length=2083)
    link_text = models.CharField(max_length=50)
    link_description = models.CharField

    def __str__(self):
        return self.link_text

这里的问题是试图让管理面板以我想要的方式运行。在管理面板中,我希望能够查看和编辑子部分(这是我的问题)希望能够编辑我当前部分所在的超级部分。

2 个答案:

答案 0 :(得分:0)

您的ModelClass Section错了。现在,Section对象只能有一个子节。 您应该将sub_sections属性替换为:

super_section = models.ForeignKey('self', related_name='sub_sections', null=True)

这样做Section对象可能有很多子节,但最多只有一个超节。

有关ForeignKey如何在Django中工作的详细信息,请查看docs

现在到管理员部分:

您可以修改管理面板,将Section对象的相关对象(即超级部分和子部分)显示为内联(TabularInlineStackedInline)。有关Django中可用的Inline类的更多信息,请查看docs

内联示例的代码:

from django.contrib import admin
from yourapp.models import Section

class SectionInline(admin.TabularInline):
    model = Section

class SectionAdmin(admin.ModelAdmin):
    inlines = [
        SectionInline,
    ]

答案 1 :(得分:0)

你的模特错了。如果我理解正确,这就是你想要的:

           Super-section
                |
             Section
          ______|______
         |      |      |
        Sub    Sub    Sub

这就是你的模型的样子:

class SuperSection(models.Model):
    # define your fields here
    # it doesn't need to have a ``ForeignKey``

class Section(...):
    super_section = models.ForeignKey(SuperSection)
    # define other fields
    # doesn't need any more ``ForeignKey``

class SubSection(...):
    section = models.ForeignKey(Section) 
    # define other keys