python - 如何在 Django 中设计多对多关系?
问题描述
我正在 Django 1.11 中开发一个 webapp,它包括:
- 用户可以添加任务并将其分配给其他用户。
- 用户应该能够看到分配给他并由他创建的任务。
这是我的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()
推荐阅读
- json - Airflow DAG 序列化:TypeError:“V1Pod”类型的对象不是 JSON 可序列化的
- r - 在单个术语中使用组和行
- windows - COM 端口延迟的用处
- node.js - npm install -D sass-loader node-sass Vue.js 2021
- php - Laravel 任务调度不提供失败输出
- css - 角度组件 CSS
- url - 在 GMail URL 中指定登录
- reactjs - 使用 WebSocket 反应 useState 导致数组无法正确更新
- git - 将多个项目隔离到一个 git 存储库中
- algorithm - 不平衡树的所有路径和问题的最坏情况空间复杂度是多少?