Skip to main content
 首页 » 编程设计

python之如何在 Django 中设计多对多关系

2025年05月04日22jyk

我正在使用 Django 1.11 开发一个网络应用程序,它包括:

  1. 用户可以添加任务并将其分配给其他用户。
  2. 用户应该能够看到分配给他和他创建的任务。

这是我的 models.py:

from __future__ import unicode_literals 
from django.db import models 
from django.contrib.auth.models import AbstractUser 
 
 
class User(AbstractUser): 
    username = None 
    email = models.EmailField(unique=True) 
    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['first_name', 'last_name'] 
 
class Task(models.Model): 
    title = models.CharField(max_length=200) 
    description = models.TextField(max_length=500) 

我应该如何将我的任务模型与用户模型相关联?我应该将多对多字段放在用户模型还是任务模型中?我该怎么做?

编辑:可以为用户分配一项或多项任务。但是不能将相同的任务分配给其他用户。我想这是一个 OneToMany 关系。您对此有何看法?

请您参考如下方法:

对于您的情况,您可以使用如下关系

from django.db.models import Q 
from django.db import models 
 
class User(AbstractUser): 
    username = None 
    email = models.EmailField(unique=True) 
    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['first_name', 'last_name'] 
 
    def get_tasks(self): 
        return Task.objects.filter( 
            Q(created_by=self) | Q(assignee=self) 
 
class Task(models.Model): 
    title = models.CharField(max_length=200) 
    description = models.TextField(max_length=500) 
    created_by = models.ForeignKey(User, on_delete=models.CASCADE) 
    assignee = models.ManyToMany(User) 
 
# how to use it 
 
user = User.objects.get(pk=5) 
tasks = user.get_tasks()