Django ORM-模型引用另一个模型多个字段
我目前正在尝试在djangos 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(),
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'所做的如果您不关心删除您的数据,那么这个答案应该会有所帮助。如果您确实关心数据,您将需要手动导出/导入数据,以解决问题,谢谢