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

标签 python django model one-to-many

我想创建一个极简任务管理应用程序来学习 Django 的基础知识。所以会有 Projects , Tasks 和 Users 作为三大实体。

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

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

这是我目前所知道的,但我知道这是错误的,我无法理解它。我试图将其他问题联系起来,例如与竞赛相关的问题和与 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)

感谢您的帮助。

最佳答案

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. 一次一个问题。

关于python - 在多对一格式的 django 模型中有多个用户作为一个模型字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13390315/

相关文章:

grails - 在Grails中一个对象被两个或多个共享时,如何设置数据库模式?

python - 如何查看爬取的unicode阿拉伯字符串?

基于 Python 的 Gallery Web 应用程序?

django - 测试django模型清理方法

c# - 无法检索元数据 - MVC 应用程序

c# - 使用 ASP.NET MVC 中父页面模型的内容填充 PartialView 模型

python - 不断收到错误 'list' 对象没有属性 'split'

python - 在插值中使用先前配置文件中的值

django - 将django中的模型表单的媒体类处理为模板

python - 将两个查询集组合成一个模板标签