在Django Admin中显示组成员的简单方法?

时间:2015-07-20 15:27:18

标签: python django django-models django-admin

我有两种模式:

class Division(models.Model):
    DIVISIONS = (
        (u'D1', u'Division1'),
        (u'D2', u'Division2'),
        (u'D3', u'Division3'),
    )
    division = models.CharField(max_length=3, choices=DIVISIONS)
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

    def __unicode__(self):
        return self.division


class Player(models.Model):
    name = models.TextField()
    code = models.CharField(max_length=6)
    division = models.ForeignKey(Division)
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

    def __unicode__(self):
        return self.name

有没有办法在分区内编辑所有玩家?我已经尝试在Division中添加ManyToMany字段,但似乎没有正确链接这两个模型。来自2009的这个问题点击了我正在努力实现的目标...是否有一种更简单,更现代的方式来编辑群组中的群组成员资格以及成员?

1 个答案:

答案 0 :(得分:1)

您可以使用InlineModelAdmin objects,尤其是TabularInline对象。下面的示例代码将允许您编辑属于特定部门的玩家列表。

# admin.py
from django.contrib import admin

class PlayerInline(admin.TabularInline):
    model = Player

class DivisionAdmin(admin.ModelAdmin):
    inlines = [
        PlayerInline,
    ]

至于能否从播放器模型编辑分区,您应该已经能够这样做,除非您从可编辑字段列表中删除它。如果您打算将其更改为ManyToManyField,则需要创建through model(例如成员资格)并创建如此的内联:

# admin.py
from django.contrib import admin

class MembershipInline(admin.TabularInline):
    model = Membership

class DivisionAdmin(admin.ModelAdmin):
    inlines = [
        MembershipInline,
    ]

class PlayerAdmin(admin.ModelAdmin):
    inlines = [
        MembershipInline,
    ]