Javascript 管理中的级联选择框

Javascript 管理中的级联选择框,javascript,ajax,django,django-admin,Javascript,Ajax,Django,Django Admin,我有以下代码来实现级联选择框(因为字段contract_mod是OneToOneField,所以我不能使用django智能选择或django ajax选择) 当我创建一个包含我想要显示的字段的字段集时,我必须将选中的合同放入管理界面中以查看结果(因为在应用代码后合同模块仍然处于禁用状态) 因此,我想我应该将选中的合同值复制到另一个字段,以便在字段集中使用 有什么建议吗 型号 class Person(models.Model): name = models.CharField(max_l

我有以下代码来实现级联选择框(因为字段contract_mod是OneToOneField,所以我不能使用django智能选择或django ajax选择)

当我创建一个包含我想要显示的字段的字段集时,我必须将选中的合同放入管理界面中以查看结果(因为在应用代码后合同模块仍然处于禁用状态)

因此,我想我应该将选中的合同值复制到另一个字段,以便在字段集中使用

有什么建议吗

型号

class Person(models.Model):
    name = models.CharField(max_length=20)
    def __unicode__(self):
        return self.name
    def get_name(self):
        return self.name

class Contract(models.Model):
    person        = models.ForeignKey(Person) #person hired
    contract_mod  = models.OneToOneField('self', blank = True, null = True)
    contract_name = models.CharField(max_length=20) #just for testing

    def __unicode__(self):
        return self.get_name() + " " +self.contract_name
    def get_name(self):
        return self.person.get_name() #to make sure you get the person name in the admin
    def contract_mod_name(self):
        if self.contract_mod:
            return self.contract_mod.contract_name
        else:
            return ""
管理

class SelectField(forms.ChoiceField):
    def clean(self, value):
        return value

class ContractForm(forms.ModelForm):
    contracts_from_selected = SelectField()
    class Meta:
        model = Contract
        widgets = { 'contract_mod' : forms.widgets.Select(attrs={'hidden' : 'true'}) }

class ContractAdmin(admin.ModelAdmin):
    form = CForm
    list_display = ('contract_name','get_name','contract_mod_name')#what you like
    def save_model(self, request, obj, form, change):
        if request.POST.get('contracts_from_selected'):
            obj.contract_mod=Contract.objects.get(id=int(request.POST.get('contracts_from_selected')))

        obj.save()
更改表单

$(function () {
    $("#id_person").change(function () {    
        var options = $("#id_contract_mod option").filter(function () {
            return $(this).html().split(" ")[0] === $("#id_person   option:selected").html();
        }).clone();
        $("#id_contracts_from_selected").empty();
        $("#id_contracts_from_selected").append(options);
    });
});

dan klasson,你为什么不能使用django smart selects,因为contract_mod是一个与自身有关系的OneToOneField。是的,我读过。具体地说,我的意思是为什么。错误是什么?
从smart\u selects.db\u字段导入ChainedForeignKey类合同(models.Model):person=models.ForeignKey(person)mod\u contatos=ChainedForeignKey(合同chained\u field=“person”,chained\u Model\u field=“person”,show\u all=False,auto\u choose=True)
我发现一个错误。您是否导入了合同?似乎你遇到了一个无关的错误。
$(function () {
    $("#id_person").change(function () {    
        var options = $("#id_contract_mod option").filter(function () {
            return $(this).html().split(" ")[0] === $("#id_person   option:selected").html();
        }).clone();
        $("#id_contracts_from_selected").empty();
        $("#id_contracts_from_selected").append(options);
    });
});