2009-04-24 3 views
1

Django flatpages использует много-ко-многим с моделью Джанго сайтаКак указать предварительно настроенное значение для многих-многих отношений в django 1.0 (flatpages)?

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

Вы должны выбрать сайт при создании нового flatpage. Хотя позже я мог бы использовать несколько сайтов, сейчас это не нужно раздражать. Я хочу, чтобы текущий (и только) сайт был выбран в форме добавления. Я не могу понять, как это сделать. Я сделал несколько других успешных изменений поведения по умолчанию по умолчанию. Но этот меня убегает.

Я хотел сделать что-то вроде следующего:

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

Но это не работает. Любая помощь приветствуется.

ответ

0

Вы забыли задние круглые скобки после получения текущего

Site.objects.get_current()

+0

Это не опечатка. Параметр по умолчанию принимает объект, подлежащий вызову. Если я не ошибаюсь, это означает, что вы передаете фактическую функцию, и она вызывает вызов создания объекта. FYI, я попробовал это с парнерами, когда выше это не сработало. – Marco

0

Пробовали ли вы limit_choices_to аргумент?

Альтернативно, удаляйтесь от flatpages и создавайте свои собственные модели страниц, если вам не нужно зависеть от структуры сайта.

+0

limit_choices_to фактически не выбирает значение в виджетах – Marco

0

Вы можете расширить FlatPageAdmin, исключить сайты и сохранить страницу с текущим сайтом. Сортировка:

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_sites, поэтому:

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

Просто выбирает первый вариант автоматически. Я помещал это в событие загрузки документа, и он работает отлично.