Django ManyToManyField通过关系

时间:2014-12-05 00:19:54

标签: python django django-models django-admin many-to-many

所以,这就是事情。 该应用程序应该只与一个数据库一起使用,因此每个数据都存储在同一个地方。 我的问题在于如何使以下关系工作: 用户应该参与多个流程,流程应该有多个用户,并且在每个流程上,他们(用户)必须具有特定的角色。 因此,有时User对象可以参与具有角色X的进程A和具有角色Y的进程B 所以我写了这段代码:

models.py

from django.db import models
from django.contrib.auth.models import User

class Process(models.Model):
    def __str__(self):
        return self.name

    party = models.ManyToManyField(User, through='Role',
        through_fields=('process', 'user'))
    name = models.CharField(max_length=50)


class Role(models.Model):
    def __str__(self):
        return self.type

    user = models.ForeignKey(User)
    process = models.ForeignKey(Process)
    X = 'X'
    Y = 'Y'
    Z = 'Y'       
    ROLE_CHOICE = (
        (X, X),
        (Y, Y),
        (Z, Z),
    )
    type = models.CharField(max_length=1, choices=ROLE_CHOICE,
        default=X)

问题是,角色应该仅限于3个选项,但是当我通过角色创建新实例时,角色对象(X,Y和Z)即使已经存在也会继续创建。 还有另一种方式可以解决所有这种关系吗?

谢谢!

0 个答案:

没有答案