我需要两个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 应该为指定的项目返回用户。
答案 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 返回指定用户的用户项目