Django - 定制后台保存模型
我有两个模型: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
里就会自动显示出这个页面。根本不需要写任何代码。