Django:关联两对一对一相关字段之间的多对多关系

问题描述

我已经在Django中创建了两个模型,通过使用OnetoOne关系扩展了认的用户和组模型。 GroupExtended和UserExtended通过ManyToMany关系关联:

from django.contrib.auth.models import Group,User

class GroupExtended(models.Model):
    group = models.OnetoOneField(
        to = Group,on_delete = models.CASCADE
    )
    [other fields...]

class UserExtended(models.Model):
    user = models.OnetoOneField(
        User,on_delete = models.CASCADE
    )

    group = models.ManyToManyField(
        GroupExtended,)

    [other fields...]

我想获得的是,当我将扩展组分配给扩展用户时,关联的用户也会尽可能地更改组。也许这张图表有助于解释自己:

chart

换句话说:是否可以将两个多对多关系关联起来,使得当我关联两个字段时,对应的一对一关联字段也被关联了?

更新:当前解决方

到目前为止,这是我在您的帮助下找到的最佳解决方案。我用Abstract User覆盖了用户模型,并扩展了Auth / Group。当我修改或创建新的扩展组时,身份验证组也会被修改或创建。

/models.py:

from django.contrib.auth.models import AbstractUser
from django.contrib.auth.models import Group

#Group
class GroupExtended(Group):
    [new fields...]

#Users
class User(AbstractUser):
    [new fields...]

我还需要覆盖管理站点: /admin.py

from app.models import User
from django.contrib.auth.admin import UserAdmin

class UserAdminext(UserAdmin):
    print(UserAdmin.fieldsets) #To get the fieldsets
    #Now I override it
    fieldsets = (
        (None,{'fields': ('username','password','new_fields')}),('Personal info',{'fields': ('first_name','last_name','email')}),('Permissions',{'fields': ('is_active','is_staff','is_superuser','groups','user_permissions')}),('Important dates',{'fields': ('last_login','date_joined')}))

admin.site.register(User,UserAdminext)

似乎可行...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)