如果经常使用Django Admin作为管理后台,那其中提供的InlineModelAdmin一定会经常凸显其魅力的。
假如有这样的需求,我们接收来自用户的消息,并针对消息的内容做关键字匹配,然后再向用户返回特定的消息。那相关的模型可能如下:
class Rule(models.Model): ... name = models.CharField(max_length=100) msg = models.ForeignKey(Message) ... class Keyword(models.Model): ... text = models.CharField(max_length=30) rule = models.ForeignKey(Rule) ...
多个Keyword和Rule是多对一的关系。那么在实际使用的时候,对于传统的方法,需要首先创建Rule,在创建Keyword并关联到Rule。但我们一定不希望这样操作,太麻烦!也许更好的方法是在创建Rule的时候能同时输入或选择所需关联的多个关键字,这样一步到位。而这即可通过InlineModelAdmin来方便的实现:
在admin.py中首先为Keyword创建一个InlineAdmin:
class KeywordInline(admin.TabularInline): model = Keyword
然后再为Rule创建ModelAdmin,并关联以上inline:
class RuleAdmin(admin.ModelAdmin): ... inlines = [KeywordInline] ... admin.site.register(Rule, RuleAdmin)
然后打开admin看看效果,一定不会失望的!另外,Django还提供了一个StackedInline,可以亲自体验一下效果。