[Answer]-Get all the items that belong to yellow boxes in Django models

1👍

This is your problem :

  • change self.values to self.value in if self.values():
  • change color to box_color in boxes_ids = boxes.filter(color=self.values()) ...

Code Example (Test and work on django 1.4.2)

from box.models import Items,Box
from django.contrib import admin
from django.utils.translation import ugettext_lazy as _
from django.contrib.admin import SimpleListFilter

class Items_by_payment_system_filter(SimpleListFilter):
    title = _('Colors')

    # Parameter for the filter that will be used in the URL query.
    parameter_name = 'color'

    def lookups(self, request, model_admin):
        """
        Returns a list of tuples. The first element in each
        tuple is the coded value for the option that will
        appear in the URL query. The second element is the
        human-readable name for the option that will appear
        in the right sidebar.
        """
        return Box.color_choices
    def queryset(self, request, queryset):
        # Remember that self.value contains the current selection in the filter options displayed to the user in Admin

        if self.value():
            boxes = Box.objects.filter(items__in=queryset) # get only boxes with the current set of items
            boxes_ids = boxes.filter(box_color=self.value()).values_list('items__id',flat=True)
            return queryset.filter(id__in=boxes_ids)


class ItemsAdmin(admin.ModelAdmin):
    fields = ['name']
    list_filter = (Items_by_payment_system_filter,)

admin.site.register(Items,ItemsAdmin)
admin.site.register(Box)

Leave a comment