BLOG
Enjoy when you can, and endure when you must.
DEC 10, 2013/Django
InlineModelAdmin的魅力

如果经常使用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,可以亲自体验一下效果。

COMMENTS
LEAVE COMMNT