2015-06-27 40 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回報用戶指定項目。

相關問題