3

假装在 Django admin 中有 4 个内联表单,每个表单都有一对字段选择,“属性”和“值选项”。我们有第一对,它用一个值初始化字段一个,例如颜色和其他字段,您必须有一个查询集选择。

请检查图像 在此处输入图像描述

正如你所看到的,我需要用它们的默认值过滤每一对,如果颜色应该只显示白色、黑色和蓝色。

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 及其各自的值,白色、蓝色和黑色。两天前我尝试过这样做,但我没有完成任何事情,如果解决方案是在表单上或在管理员的任何功能中

4

1 回答 1

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
于 2016-10-27T17:30:36.290 回答