如何创建具有交叉关系的两个Django模型?

2024-09-29 23:16:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要两个Django模型:第一个使用用户,第二个是项目。在

在它们之间,我需要一个附加字段的多对多关系。在

如何使下面的代码工作?在

from django.db import models

class User(models.Model):

    name = models.CharField('Name', max_length=50)
    projects = models.ManyToManyField(Project, through='UserProjects')

    def __str__(self):
        return self.name

class Project(models.Model):

    name = models.CharField('Name', max_length=50)
    users = models.ManyToManyField(User, through='UserProjects')

    def __str__(self):
        return self.name

class UserProjects(models.Model):

    user = models.ForeignKey(User)
    project = models.ForeignKey(Project)
    is_active = models.BooleanField('Active')

强者用户.项目应为指定的用户返回项目 以同样的方式项目.用户应返回指定项目的用户。在


Tags: 项目用户nameselfprojectmodelmodelslength
3条回答
from django.db import models

class User(models.Model):

    name = models.CharField('Name', max_length=50)

    def __str__(self):
        return self.name

class Project(models.Model):

    name = models.CharField('Name', max_length=50)
    users = models.ManyToManyField(User, through='UserProjects', related_name='projects')

    def __str__(self):
        return self.name

class UserProjects(models.Model):

    user = models.ForeignKey(User)
    project = models.ForeignKey(Project)
    is_active = models.BooleanField('Active')

没有必要把m2m领域放在两边 Jussi选择一个,Django将自动为另一个方向创建一个反向关系。在

在我看来,以下是最简单的解决方案:

from django.db import models

class User(models.Model):

    name = models.CharField('Name', max_length=50)


class Project(models.Model):

    name = models.CharField('Name', max_length=50)


class UserProjects(models.Model):

    user = models.ForeignKey(User, related_name='projects')
    project = models.ForeignKey(Project, related_name='users')
    is_active = models.BooleanField('Active')

在上面用户.项目返回指定用户的项目,也返回项目.用户返回指定项目的用户。在

相关问题 更多 >

    热门问题