3.如何在Django admin 中添加嵌套内联

你定义了下面这样的模型:

  1. class Category(models.Model):
  2. ...
  3. class Hero(models.Model):
  4. category = models.ForeignKey(Catgeory)
  5. ...
  6. class HeroAcquaintance(models.Model):
  7. hero = models.OneToOneField(Hero, on_delete=models.CASCADE)
  8. ...

你想要一个admin页面创建CategoryHeroHeroAcquaintance对象。但是,Django不支持嵌套在多个级别上的外键内联或一对一关系。你有几个选择。 你可以修改HeroAcquaintance模型。使其具有直接的FK到Category,如下所示:

  1. class HeroAcquaintance(models.Model):
  2. hero = models.OneToOneField(Hero, on_delete=models.CASCADE)
  3. category = models.ForeignKey(Category)
  4. def save(self, *args, **kwargs):
  5. self.category = self.hero.category
  6. super().save(*args, **kwargs)

然后,你可以将HeroAcquaintanceInline附加到CategoryAdmin,并获得一种嵌套内联。

另外,也有一些第三方Django应用允许嵌套内联。 Github或DjangoPackages搜索将找到适合你需求和品味的应用。