Я выбрал другой подход, обезьяна, исправляя Meta 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, но должен работать и для более старых версий.
О, и обратите внимание, что если вы действительно хотите связать пустые сайты, вы можете отменить это намеренно, так как это всего лишь инициализация виджета.Последующие изменения передадут пустой список для отображения в качестве значения, которое не является None.
Bill, KE1G