在下面的示例中,如果我创建了一个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)
答案 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")