我目前正在尝试在ORM的djangos中建立一些数据库模型。然而,我无法弄清楚我应该如何引用另一个模型,多到多的领域。
项目模型
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_user_mode())
工作正常,并在数据库中生成正确的关系。现在,我想添加一个新模型,它在权限和project_user之间添加了许多关系,所以最终结果表应该是什么样子的:
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_projectuser)是我不知道怎么做的。
发布于 2019-04-14 13:47:52
您需要将"project_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)
发布于 2019-04-14 13:59:56
在运行此代码时,我现在遇到以下问题:
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字段上添加或删除through= )
https://stackoverflow.com/questions/55675863
复制相似问题