2015-05-26 99 views
0

我試圖讓部分django模型。每個部分可以有一個或沒有超級部分,每個部分可以有多個子部分。這裏是我的模型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

https://docs.djangoproject.com/en/dev/ref/contrib /admin/#django.contrib.admin.StackedInline – madzohan

回答

0

ModelClassSection是錯誤的。現在一個Section對象只能有一個子節。 你應該用這個代替sub_sections屬性:

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

這樣做,這樣一個Section對象可能有很多小節,但最多有一個超級節。

有關ForeignKey作品在Django怎麼也得看看docs的更多信息。

我們管理部分:

您可以修改你的管理面板,以顯示相關對象(即超段和子段)爲Section對象作爲內聯(TabularInlineStackedInline)。請參閱docs以獲取有關Django中可用的Inline類的更多信息。

代碼示例在線:

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

class SectionInline(admin.TabularInline): 
    model = Section 

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

我試着做內聯,但不提供即時通訊尋找。當添加一個節我想能夠把一個名字,選擇父節,並添加子節,如果需要的話。我寧願能夠做到這一點在一個單一的管理頁面 –

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 
+0

或使用一個模型和https://github.com/django-mptt/django-mptt :) – madzohan

+0

這不是我在尋找的,因爲我會受到限制總共3個級別。我希望能夠有N個級別,如果需要的話。 –