Django ORM - модель, ссылающаяся на другое поле модели ManyToMany - PullRequest
0 голосов
/ 14 апреля 2019

В настоящее время я пытаюсь настроить некоторые модели баз данных в 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_user_mode())работает нормально и генерирует правильное отношение в базе данных.Теперь я хочу добавить новую модель, которая добавляет отношение «многие ко многим» между правами и project_user, так что таблицы конечных результатов должны выглядеть следующим образом:не знаю как сделать.

Ответы [ 2 ]

1 голос
/ 14 апреля 2019

Вам нужно превратить "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)
0 голосов
/ 14 апреля 2019

я теперь получаю следующую проблему при запуске этого кода:

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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...