在admin中显示与对象相关的集对象

时间:2017-02-28 07:51:33

标签: django django-admin

我有MovieNowShowingUpComingMovie三个模型。 NowShowing和UpComingMovie与电影有外交关系。

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)

每个模型中的三个都可以在管理员中加入:

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)

问题是我必须转到NowShowing或UpComingMovie管理页面来创建/更改对象。是否可以显示每个电影相关的设置字段(NowShowing或UpComingMovie)以在Movie对象详细信息管理页面中显示,以便可以直接从Movie obj创建/更改其相关字段,而无需转到NowShowing或Upcoming管理页面?

1 个答案:

答案 0 :(得分:2)

是的,感谢TabularInline(或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
相关问题