如何制作两个交叉关系的Django模型?

时间:2015-06-27 23:32:09

标签: python django django-models

我需要两个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')

最后 User.projects 应为指定的用户返回项目 并且以相同的方式 Project.users 应该为指定的项目返回用户

3 个答案:

答案 0 :(得分:1)

没有必要在两侧放置m2m字段  Jussi选择一个,Django将自动为另一个方向创建一个反向关系。

答案 1 :(得分:0)

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')

答案 2 :(得分:0)

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

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')

在上面的 User.projects 中为指定的用户返回项目 Project.users 返回指定用户的用户项目