2012-11-15 29 views
3

我想創建一個最低限度的任務管理應用程序來學習Django的基礎知識。因此,項目,任務和用戶將成爲三大實體。有多個用戶作爲一個模型領域多對一格式Django模型

  • 一個項目可以有多個用戶
  • 一個項目可以有多個任務
  • 任務可以被分配給1個用戶

我無法弄清楚如何做一個多對一對一個從項目 - >用戶使用django.contrib.auth.models.User作爲我的用戶來源。

這是我到目前爲止,但我知道這是錯的,我不能環繞它我的頭。我想涉及到如一個與Contestents和一個用在計算器上的漏洞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
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. A ForeignKey是多對一的關係。例如任務只屬於一個項目 - 項目可以有許多任務。

  2. 你並不需要多餘的字段名。 nameProject_Name更好

  3. 一次一個問題。

+0

非常感謝。我也會填寫你的三個筆記。這是如何防止我將一個任務分配給不在Django Admin的項目中的用戶? – kal

+1

@kal不要猶豫,要求澄清和/或發佈更多問題的個人問題。 – rantanplan

+1

@kal它沒有。您必須編寫處理該問題的代碼,因爲這是一個「業務邏輯」問題,而不是可以在數據庫級別實施的「約束」。 – rantanplan

相關問題