2017-03-02 68 views
1

我一直在試圖讓這個查詢工作幾個小時,現在我還是喜歡一些幫助,因爲我還是對Django很陌生。Django中的複雜內部聯接

我有這些模型(簡體)

class Job(models.Model): 
    country = models.ForeignKey(Country) 
    active = models.BooleanField() 

class Country(models.Model): 
    name = models.CharField(max_length=100) 

class State(models.Model): 
    name = models.CharField(max_length=100) 
    country = models.ForeignKey(Country) 

class City(models.Model): 
    name = models.CharField(max_length=100) 
    state = models.ForeignKey(State) 

class Worker(models.Model): 
    name = models.CharField(max_length=100) 
    addresses = models.ManyToManyField(Address) 

class Address(models.Model): 
    address_field = models.CharField(max_length=100) 
    city = models.ForeignKey(City) 

我想選擇所有的所有我的工人有上的地址的國家,不同的和活動的作業。我認爲有這樣的代碼:

def get(self, request): 
    worker = Worker.objects.get(pk=request.user.id) 
    full_query = Q(active=True) 
    # my problem is here, since it is a ManyToMany Relationship 
    full_query &= Q(country__id__in=worker.addresses ??????) 
    jobs = Job.objects.filter(full_query) 

我認爲這將工作讓所有勞動者的地址在一個for循環和救國救民的ID列表中,做

country_ids = [] 
for address in worker.addresses: 
    country_ids.append(address.city.state.country.id) 
Q(country__id__in=[country_ids]) 

但我認爲Django的有更優雅的方式來做到這一點。

在此先感謝!

回答

0

嘗試

jobs = Job.objects.filter(active=True).filter(country__state__city__address__in=worker.addresses.all()) 
+1

你是一個天才,先生。非常感謝! – somagrave

+0

不用擔心。不是一個天才,剛剛用Django查詢集;)。 – ChidG