How to map ForeignKey Relationship Django for 3 Models

Viewed 93

I am planning write one query to get data using 3 models.

Modle 1: Emp

class Emp(models.Model):
    empID = models.AutoField(primary_key=True)
    empName = models.CharField(max_length=70, blank=False, default='')
    empCode = models.CharField(max_length=10, blank=False, default='')
    empDesc = models.CharField(max_length=200)

    class Meta:
        db_table = 'empolyee'

    def __str__(self):
    return self.empName

Model 2: Dep

class Dep(models.Model):
    depID = models.ForeignKey(primary_key=True)
    depName = models.CharField(max_length=200)
    Emp = models.ForeignKey(EMP, on_delete=models.CASCADE, null=True)
   
    class Meta:
        db_table = 'departmen

Model 3: account

class Account(models.Model):
    accountID = models.AutoField(primary_key=True)
    accountName = models.CharField(max_length=200)
    Emp = models.ForeignKey(Emp, on_delete=models.CASCADE, null=True)
    field = models.ForeignKey(Dep, on_delete=models.CASCADE, null=True)
    
    class Meta:
        db_table = 'accounts'

I Need execute below native query (SQL):

select em.empName as fromMaster, em1.empName as toMaster from dep dp
join emp em on dp.depID = em.empID 
join account ac on dp.depID = ac.field
join emp em1 on ac.empID = em1.empID
where dep.empID ='1'

But I tried with below example but I am getting differnet query.

dataReceived = account.objects.select_related(
                'field __Emp ', 'Emp ').filter(Emp='1')

Could you please help me any one, how to achive this.

Thanks in advance !!!!

1 Answers

Try below Query:

dataReceived =  Account.objects.select_related('Emp').select_related('field __Emp').filter(field__Emp__Dep=1(user defined field input id))
Related