【问题标题】:How to pass a queryset for each different field Admin Inlines如何为每个不同的字段传递查询集
【发布时间】:2015-08-08 08:33:57
【问题描述】:

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

【问题讨论】:

    标签: django django-forms django-admin formsets


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      相关资源
      最近更新 更多