在django admin中从URL过滤水平预选项

时间:2014-02-03 19:40:35

标签: python django django-admin

首先发布在这里!我试图在我添加到我的模型的change_form的过滤器水平中预先选择一个选项。预先选择的选项的ID在URL中。我将如何在表单的 init 方法中检索它?

我看到了这个链接,retrieve url in init,但考虑到表单是由管理员自动实例化的,它似乎不符合要求。 (除非我错过了什么?)

这是我的代码。

class Section(models.Model):
    title = models.CharField()
    groups = models.ManyToManyField('Group', related_name='sections')

class Group(models.Model):
    title = models.CharField()

class GroupForm(forms.ModelForm):
    //Adding a filter-horizontal to the 
    sections = forms.ModelMultipleChoiceField(
        queryset=Section.objects.all(),
        required=False,
        widget=FilteredSelectMultiple(
            verbose_name=('Sections'),
            is_stacked=False
        )
    )

    class Meta:
        model = Group

    def __init__(self, *args, **kwargs):
        super(GroupForm, self).__init__(*args, **kwargs)
        if self.instance.pk:
            self.fields['sections'].initial = self.instance.sections.all()
        else:
            //How-to...
            //Retrieve sectionID from URL and add to initial
            self.fields['sections'].initial = …

    def save(…)
        //saving the selected sections

有一种简单的方法吗?

我设法通过jQuery做我想做的事,但我想知道是否有办法在init方法中做到...

编辑:这是我目前的JS片段,以防它可能对某人有用......基本的jquery,但无论如何......

function getFromURI(URI, paramName) {
    var hash;
    if(paramName != undefined){
        URI = URI.split('&');
        for(var i = 0; i < URI.length; i++){
            hash = URI[i].split('=');

            if (hash[0] == paramName)
                return hash[1]
        }
    }
    return null
}

var q = document.URL.split('?')[1];
var id = getFromURI(unescape(q), 'sectionId')

$('#id_sections_from option[value="' + id + '"]').detach().appendTo('#id_sections_to')

1 个答案:

答案 0 :(得分:1)

好吧,在寻找不同的东西时,我落在this great answer by Chris Pratt上,这正是我当时所寻找的。

事实证明,“请求”可以通过kwargs访问......

无论如何,请将此作为答案......