0

i have a case like this : Models

class Car(models.Model):
     description = models.CharField(max_length=200)
     is_available = models.BooleanField(default=False)

class Rental(models.Model):
    car = models.ManyToManyField(Car)

My question is, how to display Car on Rental models with is_available = True. On django admin ? Thank you

Mar_TO
  • 183
  • 1
  • 3
  • 9
  • Does this answer your question? [many-to-many in list display django](https://stackoverflow.com/questions/18108521/many-to-many-in-list-display-django) – Ankit Tiwari Apr 27 '22 at 07:21

2 Answers2

1

You can override get_queryset method of the django admin class.

Generic Syntax for that->

class MyModelAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        qs = super().get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(author=request.user)

In your case this would be -:

class RentalAdmin(admin.ModelAdmin):
    def get_queryset(self,request):
        qs = super().get_queryset(request)
        return qs.filter(car__is_available=True)

You can Refer to the docs here

For Inline your code should be -:

class CarInline(admin.StackedInline):
    model=Rental.car.through
    #model=Car
    def get_queryset(self,request):
        qs = super().get_queryset(request)
        return qs.filter(is_available=True)

class RentalAdmin(admin.ModelAdmin):
    inlines=[CarInline]
Swapnil Chopra
  • 591
  • 5
  • 9
0

you can try django inline model admin

Sherif Hassan
  • 147
  • 1
  • 4