如何为每个不同的字段Admin Inlines传递查询集

时间:2015-05-26 15:11:09

标签: django django-forms django-admin formsets

假装在Django管理员中有4个表单内联,每个表单都有一对字段选项,“Attributes”和“Value Option”。我们有第一对,用一个值初始化字段1,例如颜色和其他字段,你必须有一个查询集的选择。

请检查图片 enter image description here

如您所见,我需要使用默认值过滤每一对,如果Color应该只显示白色,黑色和蓝色。

class ProductAttributeValueForm(forms.ModelForm):
    attribute = forms.ModelChoiceField(label=_('Attribute'),
        widget=forms.Select(attrs={'disabled': 'True'}),
        queryset=ProductAttribute.objects.all(), required=False)

class ProductAttributeValueFormSet(BaseInlineFormSet):

    def __init__(self, *args, **kwargs):
        super(ProductAttributeValueFormSet, self).__init__(*args, **kwargs)
        # This return initial [{'attribute' initial}, {..}, {..}]
        self.initial = [{'attribute': a} for a in obj.category.attributes.all()]
        # Now we need to make a queryset to each field of each form inline
        self.queryset = [{'value_option' .. }, { .. }]

我所做的是使用一个值初始化每个属性,例如Color,并将一个查询集传递给value_option,其值分别为白色,蓝色和黑色。 我两天前试图这样做,我没有完成任何事情,如果解决方案是在表格上或在管理员的任何功能

1 个答案:

答案 0 :(得分:1)

class ParametersInlineForm(forms.forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(ParametersInlineForm, self).__init__(*args, **kwargs)
        try:
            self.fields['value'].queryset = models.Value.objects.filter(parameter=self.instance.parameter)
        except:
            self.fields['value'].queryset = models.Value.objects.none()


class ParametersInline(admin.StackedInline):
    model = models.Product.parameters.through
    form = ParametersInlineForm