2015-06-27 49 views
2

我需要两个Django模型:第一个与用户,第二个与项目如何制作两个具有交叉关系的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
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') 
1

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

+0

我知道 - 但需要清晰和漂亮的应用程序界面 – pga

+0

@pga嗯,它不会与Django一起使用。如果它看到两个M2M声明,它认为存在两种不同的M2M关系。如果您正在讨论关于反向关系的管理界面,则必须在设置[管理员选项]时添加它(https://docs.djangoproject.com/en/dev/ref/contrib/admin/#劳动与一对多一对多的模型) – spectras

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回报用户指定项目。

相关问题