2013-03-19 256 views
0

我正在爲我的應用製作模型,並且對模型的關係有疑問。Django模型關係

該公司模型有一個或多個辦事處。 而辦公室有一個或多個員工。

class Company(models.Model): 
     name = models.CharField(max_length=50) 
     mail = models.EmailField(null=True, blank=True) 
     NIF = models.CharField(max_length=9, null=True, blank=True) 
     def __unicode__(self): 
       return self.name 

class Office(models.Model): 
     company = models.ForeignKey(Company) 
     name = models.CharField(max_length=50, default='Main') 
     direction = models.CharField(max_length=50) 
     def __unicode__(self): 
       return self.name 

class Employee(models.Model): 
     company = models.ForeignKey(Company) 
     office = models.ForeignKey(Office) 
     name = models.CharField(max_length=50) 
     mail = models.EmailField(null=True, blank=True) 
     def __unicode__(self): 
       return self.name 

我該如何建立員工與公司和辦公室之間的關係?

+1

你的意思是「相關」?你能詳細說明一下嗎? – andrefsp 2013-03-19 21:55:52

+0

在員工和公司以及辦公室之間建立關係。 辦公室屬於公司 員工屬於同一家公司的辦公室。 – Blainn 2013-03-19 22:01:00

回答

2

Employee中刪除company外鍵。

class Employee(models.Model): 
    office = models.ForeignKey(Office) 
    name = models.CharField(max_length=50) 
    mail = models.EmailField(null=True, blank=True) 
    def __unicode__(self): 
      return self.name 

由於Office模型已經與CompanyEmployee一段親密關係Office關係,你可以訪問它像employee.office.company -

employee_one = Employee.objects.get(pk=1) 
company_of_employee_one = employee_one.office.company 

如果你想周圍訪問數據的其他方式(即得到一家公司的所有辦公室,得到一個辦公室的所有員工),你可以這樣做 -

company = Company.objects.get(pk=1) 
offices = company.office_set.all() 
for office in offices: 
    employees = office.employee_set.all()