如何在django 1.0(flatpages)中为多对多关系指定预填充值?

时间:2009-04-24 01:25:21

标签: django django-flatpages

Django flatpages使用与django Site模型的多对多关系

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

您必须在创建新平面页时选择网站。虽然我可能会在以后使用多个网站,但现在这不必要了。我想在添加表单上预先选择当前(和唯一)站点。我无法弄清楚如何实现这一目标。我已经对默认的flatpages行为进行了其他一些成功的修改。但是这个逃脱了我。

我想做类似以下的事情:

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

但这不起作用。任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:0)

在获得最新信息后忘记了尾随的parens

Site.objects.get_current()

答案 1 :(得分:0)

您是否尝试过limit_choices_to参数?

如果您不需要依赖于站点框架,也可以远离平面页面并创建自己的自定义页面模型。

答案 2 :(得分: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)

答案 3 :(得分:0)

我最后只是用了一点jquery来做这件事。它不是很便携,但对我有用。网站的选择框的ID为“id_sites”,因此:

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

只需自动选择第一个选项。我把它放在文件加载事件中,它工作得很好。