Django - 定制后台保存模型

0 投票
1 回答
630 浏览
提问于 2025-04-18 07:18

我有两个模型:Page 和一个自定义用户模型 MyUser

这两个模型各自都有一个多对多字段(manytomanyfield):

class Page(models.Model):
    members = models.ManyToManyField(settings.AUTH_USER_MODEL)

class MyUser(AbstractUser):
    mypages = models.ManyToManyField(Page)
    objects = UserManager()

当我通过管理界面给 members 这个多对多字段添加一个成员时,我希望能自动把新添加的 Page 对象也加到用户的 mypages 属性里。所以我想在 admin.py 中重写 Page 模型的保存方法:

class PageAdmin(admin.ModelAdmin):
    def save_related(self, request, form, formsets, change):
        super(ModelAdmin, self).save_related(request, form, formsets, change)
        if 'members' in form.changed_data:
        #And I am quite lost....

这样做是否合适?我应该在 models.py 文件里的“Page模型自定义保存”方法中做这个,还是在 admin.py 中做?

我尝试用以下链接中的想法替换 #And I am quite lost.... 的部分:
链接1
链接2

但是没有成功!

1 个回答

0

这个说法完全错误。多对多的关系本身就是双向的。你不需要在两个地方都定义它。当你在Page上定义一个members字段时,MyUser会自动获得一个page_set的访问器,这就是关系的另一端。任何一个页面只要把用户添加到它的成员中,这个用户的page_set里就会自动显示出这个页面。根本不需要写任何代码。

撰写回答