Benjamin Smith Max
Benjamin Smith Max

Reputation: 2748

Display the object related set objects in the admin

I have three models for Movie, NowShowing and UpComingMovie. NowShowing and UpComingMovie has foreignkey relationship with the Movie.

class Movie(models.Model):
    name = models.CharField(max_length=254, unique=True)
    synopsis = models.TextField()
    release_date = models.DateField()
    director = models.ManyToManyField(MovieDirector)
    writer = models.ManyToManyField(MovieWriter)
    actor = models.ManyToManyField(MovieActor)
    censor_rating = models.PositiveIntegerField(choices=CENSOR_TYPE)

    @property
    def is_screening(self):
        if self.nowshowing_set.all().count() > 0:
            return True
        else:
            return False


class NowShowing(models.Model):
    movie = models.ForeignKey(Movie)
    show_time = models.DateTimeField()


class UpComingMovie(models.Model):
    movie = models.ForeignKey(Movie)

Each three of the models can be accesed in the admin:

class MovieAdmin(admin.ModelAdmin):
    list_display = ('name', 'release_date', 'censor_rating', 'is_screening')

    class Meta:
        model = Movie

admin.site.register(Movie, MovieAdmin)
admin.site.register(NowShowing)
admin.site.register(UpComingMovie)

The problem is that I have to go to NowShowing or UpComingMovie admin page to create/change object. Is it possible to display each movies related set fields (NowShowing or UpComingMovie) to display in the Movie object detail admin page itself, so that its related field can be created/changed from the Movie obj directly without going to NowShowing or Upcoming admin page?

Upvotes: 2

Views: 52

Answers (1)

e4c5
e4c5

Reputation: 53734

Yes, it's quite possible thanks to TabularInline (or StackedInline)

class UpcomingInline(admin.TabularInline):
    model = UpComingMovie

class NowShowingInline(admin.TabularInline):
    model = NowShowing

class MovieAdmin(admin.ModelAdmin):
    list_display = ('name', 'release_date', 'censor_rating', 'is_screening')
    inlines = [UpcomingInline,NowShowingInline]
    class Meta:
        model = Movie

Upvotes: 2

Related Questions