大多數情況下我使用一個網站的flatpage(來自網站框架)。我如何標記所有創建的頁面的現有站點默認值? 每次爲每個創建的頁面選擇相同的網站都是浪費時間。有沒有什麼辦法可以在模型或保存方法中覆蓋它?Django flatpage默認網站
6
A
回答
1
8
允許在網站領域的空白(models.py - > FlatPage.sites),並把這個模型中的表格(admin.py - > FlatPageForm)
def clean_sites(self):
sites = self.cleaned_data.get('sites')
print sites
return [Site.objects.get(id=settings.SITE_ID)]
編輯: 我想出了一個更好的解決方案。 這使得當前網站已經專注於ManyToMany網站領域。修改flatpages/admin.py。地址:from django.contrib.sites.models import Site
文件的beggining,把下面的代碼class FlatPageAdmin
:
def formfield_for_manytomany(self, db_field, request=None, **kwargs):
if db_field.name == "sites":
kwargs["initial"] = [Site.objects.get_current()]
return super(FlatPageAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
沒有必要在簡單頁面模型允許空白網站領域
1
這裏是代碼工作完全片解決原來的問題(標記所有創建的flatpages現有站點默認):
from django.conf import settings
from django.contrib.flatpages.models import FlatPage
from django.contrib.sites.models import Site
class CustomFlatPage(FlatPage):
class Meta:
proxy = True
def save(self):
self.sites = [Site.objects.get(pk=settings.SITE_ID)]
super(CustomFlatPage, self).save()
而且該解決方案:
- 只在DB中運行一個INSERT或一個UPDATE。前一個是用一個INSERT和一個UPDATE或兩個UPDATE命中DB。
- 通過使用
proxy = True
不需要運行syncbd爲了創建CustomFlatPage
模型的額外表格。
1
我採取了不同的方法,猴子修補FlatpageForm元使用自定義小部件的網站。
from django.forms import SelectMultiple
from django.conf import settings
from django.contrib.flatpages.forms import FlatpageForm
class PreSelectDefaultSiteOnCreateSelectMultiple(SelectMultiple):
def render(self, name, value, attrs=None, choices=()):
if value is None:
# None in the add form, a list, possibly empty, in
# the edit form. So we're adding a new instance here.
value = [settings.SITE_ID]
return super(PreSelectDefaultSiteOnCreateSelectMultiple, self
).render(name, value, attrs, choices)
def flatpages():
"""Hack the sites field widget.
"""
fpafm = FlatpageForm.Meta
if getattr(fpafm, 'widgets', None) is None:
fpafm.widgets = {}
fpafm.widgets['sites'] = PreSelectDefaultSiteOnCreateSelectMultiple
您必須在可能使用管理員之前從某處調用flatpages()。我把上面的代碼中的模塊admin.py在封裝monkey_patches,然後在我的根urls.py,其被導入的第一次請求時,我把:
from monkey_patches.admin import flatpages
flatpages()
這是Django的1.4下與Python 2.7.3,但也應該爲舊版本工作。
哦,並注意如果你真的想要一個空的網站關聯,你可以有意取消它,因爲這只是小部件的初始化。後續編輯將傳遞一個空列表以呈現爲值,而不是無。
Bill,KE1G
相關問題
- 1. django網站默認
- 2. Python,Django和flatpage
- 3. 多個默認網站IIS
- 4. django flatpage重定向
- 5. Django flatpage中間件
- 6. 服務XML Django flatpage?
- 7. 使用網站而非「默認網站」,默認端口,net.tcp的WCF服務
- 8. 在django flatpage中嵌入tinyMCE
- 9. Django默認表
- 10. 網站縮小Android默認瀏覽器
- 11. Liferay:按網站默認語言
- 12. 將默認網站添加回IIS 6.0
- 13. 本地網站默認爲https
- 14. 修改默認的網站在IIS 6.0
- 15. 網站中的默認命名空間
- 16. 默認登錄彈出網站
- 17. 更改ASP.net網站的默認路徑
- 18. PHP的默認網站變量
- 19. 網站未啓動默認頁面
- 20. 新網站上的默認SharePoint權限
- 21. 如何從「默認」網站讀取logExtFileFlags?
- 22. 默認網站SSL laravel僞造
- 23. IIS:添加綁定到默認網站
- 24. 手機網站默認頁面
- 25. ASP.NET網站默認使用Cookie嗎?
- 26. 網站magento默認商店ID
- 27. 如何讓網站使用https默認?
- 28. 更改網站默認語言(Wordpress)
- 29. 默認縮圖爲wordpress網站
- 30. Laravel 5 /設置默認網站
您的意思是在Django管理員中?或者一般的模型? – Thomas 2011-01-24 20:29:21