Django Admin Cookbook-23如何在Django admin中添加嵌套的内联
23.如何在Django admin中添加嵌套的内联?
假设我们定义了以下模型:
class Category(models.Model): ... class Hero(models.Model): category = models.ForeignKey(Catgeory) ... class HeroAcquaintance(models.Model): hero = models.OneToOneField(Hero, on_delete=models.CASCADE) ...
你想拥有一个管理页面来同时创建Category、Hero和HeroAcquaintance对象。但是,Django不支持跨多个级别的外键或一对一关系嵌套内联。有以下几种处理方法,
我们可以更改HeroAcquaintance模型,使其直接外联到到Category,代码如下:
class HeroAcquaintance(models.Model): hero = models.OneToOneField(Hero, on_delete=models.CASCADE) category = models.ForeignKey(Category) def save(self, *args, **kwargs): self.category = self.hero.category super().save(*args, **kwargs)
然后,你可以附加HeroAcquaintanceInline内联到CategoryAdmin,并获得一种嵌套的内联。
另外,也有一些第三方Django插件允许嵌套内联。在Github或DjangoPackages中搜索可以快速将找到适合适合你需要的三方插件。