2009-04-24 18 views
1

的Django的flatpages使用與Django的網站模式如何爲django 1.0(flatpages)中的多對多關係指定預填充的值?

class FlatPage(Model) 
    ... 
    sites = ManyToManyField(Site) 

創建一個新的簡單頁面時,必須選擇一個站點一個多一對多的關係。雖然以後我可能會使用多個站點,但現在不需要煩人了。我想要在添加表單上預先選擇當前(且唯​​一)的網站。我無法弄清楚如何做到這一點。我對默認的頁面行爲做了其他幾項成功的修改。但是這個逃脫了我。

我想做一些類似如下:

sites = ManyToManyField(Site, default=Site.objects.get_current) 

但是,這並不工作。任何幫助表示讚賞。

回答

0

您忘記後的括號後獲得當前

Site.objects.get_current()

+0

這不是一個錯字。默認選項需要一個可調用的對象。除非我錯了,這意味着你傳遞了實際的函數,並在創建對象時被調用。僅供參考,當上述情況不起作用時,我確實嘗試了配對。 – Marco 2009-04-24 19:05:53

0

你曾嘗試limit_choices_to說法?

如果您不需要依賴網站框架,也可以從平板頁面移開並創建自己的自定義頁面模型。

+0

limit_choices_to實際上並未選擇小部件中的值 – Marco 2009-06-22 14:12:45

0

您可以擴展FlatPageAdmin,排除網站並保存當前網站的flatpage。排序:

class ExtendedFlatPageAdmin(FlatPageAdmin): 
    fieldsets = (
     (None, { 
      'fields': ('url', 'title', 'content') 
     }), 
     ('Advanced options', { 
      'classes': ('collapse',), 
      'fields': ('enable_comments', 'registration_required', 'template_name') 
     }), 
    ) 

    def save_model(self, request, obj, form, change): 
     obj.save() 
     current_site = Site.objects.get_current() 
     obj.sites.add(current_site) 
0

我結束了剛剛僱用一個小jQuery來做到這一點。它不是很便攜,但爲我工作。網站選擇框的ID爲「id_sites」,因此:

$('#id_sites').attr('selectedIndex',0); 

只需自動選擇第一個選項。我把它放在文檔加載事件中,它工作得很好。