首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django ORM -引用另一个模型ManyToMany字段的模型

Django ORM -引用另一个模型ManyToMany字段的模型
EN

Stack Overflow用户
提问于 2019-04-14 13:35:06
回答 2查看 521关注 0票数 0

我目前正在尝试在ORM的djangos中建立一些数据库模型。然而,我无法弄清楚我应该如何引用另一个模型,多到多的领域。

项目模型

代码语言:javascript
运行
复制
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之间添加了许多关系,所以最终结果表应该是什么样子的:

代码语言:javascript
运行
复制
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)是我不知道怎么做的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-14 13:47:52

您需要将"project_user“转换为一个贯通模型,然后可以将多个关系添加到其中。

代码语言:javascript
运行
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2019-04-14 13:59:56

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

代码语言:javascript
运行
复制
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= )

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55675863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档