在同一模型中使用两个外键创建关系

时间:2015-03-04 06:59:00

标签: django django-models

在下面的示例中,如果我创建了一个Role,我该如何使该Role自动使用该Role中指定的band和member值更新Member.band。目前,我必须记住在admin中手动添加隐式关系。

models.py

class Band(models.Model):
    pass

class Member(models.Model):
    band = models.ManyToManyField(Band)

class Role(models.Model):
    band = models.ForeignKey(Band)
    member = models.ForeignKey(Member)

1 个答案:

答案 0 :(得分:1)

如果您只想在管理员中使用,那么您可以覆盖save_model()方法:

class RoleAdmin(admin.ModelAdmin):

    def save_model(self, request, obj, form, change):
        obj.save()
        if not change:
            obj.member.band.add(obj.band)

另一种选择是使用post_save信号。如果是这种情况,代码也将在管理员之外运行:

def add_band(sender, instance, created, **kwargs):
    if created:
        instance.member.band.add(instance.band)

post_save.connect(add_band, sender=Role, dispatch_uid="add_band")