我正在尝试使用部分获取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
这里的问题是试图让管理面板以我想要的方式运行。在管理面板中,我希望能够查看和编辑子部分(这是我的问题)希望能够编辑我当前部分所在的超级部分。
答案 0 :(得分:0)
您的ModelClass
Section
错了。现在,Section
对象只能有一个子节。
您应该将sub_sections
属性替换为:
super_section = models.ForeignKey('self', related_name='sub_sections', null=True)
这样做Section
对象可能有很多子节,但最多只有一个超节。
有关ForeignKey
如何在Django中工作的详细信息,请查看docs。
现在到管理员部分:
您可以修改管理面板,将Section
对象的相关对象(即超级部分和子部分)显示为内联(TabularInline
或StackedInline
)。有关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