2013-03-19 285 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()