从Django管理员的URL中的滤波器中预选选项



第一个文章!我正在尝试在滤镜中预选一个选项,然后将我添加到模型的change_form中。预选选项的ID在URL中。我将如何在我的表单的 init 中检索它?

我看到了此链接,在init中检索URL,但是考虑到该表格是由管理员自动实例化的,它似乎不符合账单。(除非我缺少什么?)

这是我的代码。

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')

好吧,寻找与众不同的东西,我遇到了克里斯·普拉特(Chris Pratt)的这个很好的答案,这正是我当时正在寻找的。

事实证明,可以通过Kwargs访问"请求" ...

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

最新更新