使用外键关系内联的模型表单

时间:2013-06-07 02:59:34

标签: django list foreign-keys choice

需要一些帮助将ModelForm传递给内联。

这是我必须测试可用的IP地址。它适用于标准的ModelAdmin,但我需要它进入Inline。但我不知道如何使用foreignkey获取列表。可用的IP地址需要进入DslamSet模型,IP地址在保存期间在IP_block模型中计算。

forms.py

class IP_blockForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(IP_blockForm, self).__init__(*args, **kwargs)
        if self.instance and self.instance.ip_range:

            split_range = self.instance.ip_range.split(' ')
            ip_list_choices = zip(split_range, split_range)

            self.fields['ip_list'] = forms.ChoiceField(choices=ip_list_choices)

    class Meta:
        model = IP_block

我正在考虑这样做,但似乎没有用。我收到错误“没有提供异常”

class DslamSetForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(DslamSetForm, self).__init__(*args, **kwargs)
        if self.instance and self.instance.ip_block.ip_range:

            split_range = self.instance.ip_block.ip_range.split(' ')
            ip_list_choices = zip(split_range, split_range)

            self.fields['ip_list'] = forms.ChoiceField(choices=ip_list_choices)

    class Meta:
        model = DslamSet

我知道我做错了什么,但不确定它是什么。欢迎任何帮助。

1 个答案:

答案 0 :(得分:0)

我认为我找到了一个解决方案,但我确信有更正确的方法可以做到这一点。

 class DslamSetForm(forms.ModelForm):
    def clean(self, *args, **kwargs):
        if self.cleaned_data and self.instance and self.instance.ip_block and self.instance.ip_block.ip_range and not self.instance.port:
            super(DslamSetForm, self).clean(*args, **kwargs)
            split_range = self.instance.ip_block.ip_range.split(' ')
            ip_list_choices = zip(split_range, split_range)
            self.fields['ip_address'] = forms.ChoiceField(choices=ip_list_choices)            

        return self.cleaned_data


    class Meta:
        model = IP_block