首先发布在这里!我试图在我添加到我的模型的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')
答案 0 :(得分:1)
好吧,在寻找不同的东西时,我落在this great answer by Chris Pratt上,这正是我当时所寻找的。 p>
事实证明,“请求”可以通过kwargs访问......
无论如何,请将此作为答案......