#24861: Pass a queryset for each different field Admin Inlines
-------------------------------------+-------------------------------------
     Reporter:  unehub               |                    Owner:  nobody
         Type:  New feature          |                   Status:  new
    Component:  contrib.admin        |                  Version:  master
     Severity:  Normal               |               Resolution:
     Keywords:  admin, inlines,      |             Triage Stage:
  forms, formsets                    |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Changes (by unehub):

 * needs_better_patch:   => 0
 * needs_tests:   => 0
 * needs_docs:   => 0


Old description:

> Pretend to have in the Django admin, 2 forms inlines, Each with a pair of
> fields choices, "Attributes" and "Value Option". We have the first pair,
> which initialize the field one with a value, for example color and other
> field you must have a queryset the choices.
>
> [[Image(http://i.stack.imgur.com/kk1xQ.png)]]
>
> As you can see We need to filter each pair with their default values, if
> Color should show only white, black and blue.
>

> {{{
> 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' .. }, { .. }]
> }}}
>
> What I do is initialize each attribute with a value, for example, Color
> and passed a queryset to value_option with their respective values,
> white, blue and black. I have tried to do this two days ago and I have
> not accomplished anything, not if the solution is on the forms or in any
> function of admin.
>
> if I could just iterate a QuerySet each model choice of the form. The
> only thing achieved is that a queryset applies to all forms inline, but I
> need a different one for each inline.
>
> def formfield_for_foreignkey(self, db_field, request, **kwargs):
>     if db_field.name == "value_option":
>         kwargs["queryset"] = request._obj_.category.attributes.all()
>     return super(AttributeInline,
> self).formfield_for_foreignkey(db_field, request, **kwargs)
>
> So, if you have Attribute: Color, Size, ROM, RAM,  the ideal would happen
> to a custom list value_options each.

New description:

 Pretend to have in the Django admin, 2 forms inlines, Each with a pair of
 fields choices, "Attributes" and "Value Option". We have the first pair,
 which initialize the field one with a value, for example color and other
 field you must have a queryset the choices.

 [[Image(http://i.stack.imgur.com/kk1xQ.png)]]

 As you can see We need to filter each pair with their default values, if
 Color should show only white, black and blue.


 {{{
 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' .. }, { .. }]
 }}}

 What I do is initialize each attribute with a value, for example, Color
 and passed a queryset to value_option with their respective values, white,
 blue and black. I have tried to do this two days ago and I have not
 accomplished anything, not if the solution is on the forms or in any
 function of admin.

 if I could just iterate a QuerySet each model choice of the form. The only
 thing achieved is that a queryset applies to all forms inline, but I need
 a different one for each inline.


 {{{
 def formfield_for_foreignkey(self, db_field, request, **kwargs):
     if db_field.name == "value_option":
         kwargs["queryset"] = request._obj_.category.attributes.all()
     return super(AttributeInline, self).formfield_for_foreignkey(db_field,
 request, **kwargs)
 }}}


 So, if you have Attribute: Color, Size, ROM, RAM,  the ideal would happen
 to a custom list value_options each.

--

--
Ticket URL: <https://code.djangoproject.com/ticket/24861#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/064.65e54af00331a44fbc3a327de9269945%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to