9

Djangoの基本を学ぶために、ミニマリストのタスク管理アプリを作成したいと思います。したがって、3つの大きなエンティティとして、プロジェクト、タスク、およびユーザーが存在します。

  • プロジェクトには複数のユーザーを含めることができます
  • プロジェクトには複数のタスクを含めることができます
  • タスクは1人のユーザーに割り当てることができます

django.contrib.auth.models.Userプロジェクト->ユーザーソースとして使用しているユーザーから多対1を実行する方法を理解できません。

これは私が今まで持っていたものですが、それが間違っていることを知っており、頭を包むことができません。StackOverflowで、コンテスト参加者の質問や脆弱性URLの質問などの他の質問に関連付けようとしました。独自のユーザーモデルを作成する必要があるのか​​、それとも何らかの方法で拡張する必要があるのか​​わかりません。

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)

ご協力ありがとうございました。

4

1 に答える 1

10
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. AForeignKeyは多対1の関係です。たとえば、タスクは1つのプロジェクトにのみ属します-プロジェクトは多くのタスクを持つことができます。

  2. 余分なフィールド名は必要ありません。nameよりも良いProject_Name

  3. 一度に1つの質問。

于 2012-11-15T01:39:34.480 に答える