django数据库模型中的多对多关系

问题描述 投票:2回答:1

嗨,我是python新手,第一次在mysql中实现ORM。

我们有三个两个表和一个中间表,如下图many to many relationship所示

下面是我们用来创建模型的代码

class Roles(models.Model):
    """
    A class that stores all the types of roles that are available to the user
    """
    role_id = models.CharField(max_length=200, blank=False,primary_key=True)
    role_name = models.CharField(max_length=200)

    class Meta:
        db_table = 'roles'
        managed = False


class User(AbstractBaseUser):
# class ChannelUser(models.Model):
    """
    An abstract base class implementing a fully featured User model with
    admin-compliant permissions.

    """
    user_id = models.CharField(max_length=200, blank=False,primary_key=True)
    user_email = models.EmailField(max_length=200, blank=False, unique=True)
    roles=models.ManyToManyField(
        Roles,
        through='UserRole',
        # through_fields=('user_id', 'role_id'),
    )

    USERNAME_FIELD = 'user_email'

    class Meta:
        db_table = 'user'
        managed = False

class UserRole(models.Model):
    """
    A class that stores user ids and role ids
    """
    user = models.ForeignKey(User, on_delete=models.PROTECT, db_column='user_id')
    role = models.ForeignKey(Roles, on_delete=models.PROTECT, db_column='role_id') 
    timestamp = models.DateTimeField(default=timezone.now)   

    class Meta:
        db_table = 'user_roles'
        managed = False

我们试图获取与Roles相关的所有User,但它为roles提供None。

我不确定,我们在这里做错了什么。请有人指出来。

下面是我用来获取角色的代码

user_detail = User.objects.get(user_email=username)
print(user_detail.user_email)  //prints user email
print(user_detail.roles) // prints Roles.None

settings.朋友

AUTH_USER_MODEL = "login_api.User"
python django django-models
1个回答
0
投票

访问特定模型实例(而不是模型的经理)时,您可以使用modelname_set而不是modelname访问相关项目。例如:

>>> user_detail.roles_set.remove(my_role)
>>> user_detail.roles_set.all()
<QuerySet []>

文档:

https://docs.djangoproject.com/en/2.1/topics/db/examples/many_to_many/

© www.soinside.com 2019 - 2024. All rights reserved.