多个用户作为一个模型字段在多对一格式django模型中

时间:2012-11-15 01:35:51

标签: python django model one-to-many

我想创建一个简约的任务管理应用程序来学习Django的基础知识。因此,项目,任务和用户将成为三大实体。

  • 项目可以有多个用户
  • 项目可以有多个任务
  • 可以将任务分配给1个用户

我无法弄清楚如何从项目中做多对一 - >使用django.contrib.auth.models.User作为我的用户来源的用户。

这是我到目前为止所做的,但我知道这是错误的,我无法绕过它。我尝试与其他问题相关,例如Contestents和StackOverflow上的漏洞URLS。我不确定是否必须编写自己的用户模型,或以某种方式扩展它。

class Project(models.Model):
    Project_Name = models.CharField(max_length=100)
    Project_Users = models.ManyToManyField(User)

class Tasks(models.Model):
    Task_Name = models.CharField(max_length=300)
    Task_AssignedToUser = models.ForeignKey("Project_Name", through=Users)

感谢您的帮助。

1 个答案:

答案 0 :(得分:6)

class Project(models.Model):
    name = models.CharField(max_length=100)
    users = models.ManyToManyField(User)

class Task(models.Model):
    project = models.ForeignKey(Project, related_name='project_tasks')
    name = models.CharField(max_length=300)
    assignee = models.ForeignKey(User, related_name='tasks')

获取参与特定项目的用户:

p = Project.objects.get(name='myproject')
users = p.users.all()

获取项目的任务:

users = p.project_tasks.all()  # Because of `related_name` in Task.project

获取用户拥有的所有项目中的所有任务:

u = User.objects.get(username='someuser')
u.tasks.all()  # Because of `related_name` in Task.assignee

注意:

  1. ForeignKey是多对一关系。例如任务只属于一个项目 - 项目可以有许多任务。

  2. 您不需要多余的字段名称。 name优于Project_Name

  3. 一次一个问题。