Django ORM-模型引用另一个模型多个字段

Django ORM-模型引用另一个模型多个字段,django,orm,Django,Orm,我目前正在尝试在djangos ORM中设置一些数据库模型。然而,我无法理解我应该如何引用另一个多对多领域的模型 项目模型 class Project(models.Model): projectName = models.CharField(max_length=200) users = models.ManyToManyField(get_user_model()) projectOwner = models.ForeignKey(get_user_model(),

我目前正在尝试在djangos ORM中设置一些数据库模型。然而,我无法理解我应该如何引用另一个多对多领域的模型

项目模型

class Project(models.Model):
    projectName = models.CharField(max_length=200)
    users = models.ManyToManyField(get_user_model())
    projectOwner = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, related_name='projectowner', default=1)
users=models.manytomanyfield(get\u user\u mode())
工作正常 并在数据库中生成正确的关系。 现在,我想添加一个新模型,在权限和项目用户之间添加多对多关系 那么最终结果表应该是什么样子的:

project:
projectname - string
projectowner - id of referenced user

user: django orm auth user model

rights:
name
description
etc

project_user:
id
project_id
user_id

rights_projectuser:
id
rights_id
project_user_id
现在我不知道如何制作最后一个(rights\u projectuser)。

您需要将“project\u user”转换为一个,然后您可以添加多对多关系

class Project(models.Model):
    projectName = models.CharField(max_length=200)
    users = models.ManyToManyField(get_user_model(), through='ProjectUser')

class ProjectUser(models.Model):
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    rights = models.ManyToManyField(Right)

我现在在运行此代码时遇到以下问题:

from django.db import models
from django.contrib.auth import get_user_model

User = get_user_model()

class Project(models.Model):
    projectName = models.CharField(max_length=200)
    users = models.ManyToManyField(get_user_model(), through='ProjectUser')
    projectOwner = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, related_name='projectowner', default=1)

class Right(models.Model):
    name = models.CharField(max_length=200)
    description = models.CharField(max_length=1000)

class ProjectUser(models.Model):
    user_id = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    project_id = models.ForeignKey(Project, on_delete=models.CASCADE)
    rights = models.ManyToManyField(Right)

ValueError:无法将字段wspingpong.Project.users更改为wspingpong.Project.users-它们是不兼容的类型(您无法更改M2M字段或从M2M字段中更改,或通过M2M字段上的=添加或删除)

如果我要运行该代码,项目和用户之间不存在两种多对多关系吗?1来自模型项目:users=models.manytomany和1来自项目用户本身,哦,nvm,我想这就是通过class='projectuser'所做的如果您不关心删除您的数据,那么这个答案应该会有所帮助。如果您确实关心数据,您将需要手动导出/导入数据,以解决问题,谢谢