大多数情况下我使用一个网站的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