2017-10-01 1 views
0

하나의 쿼리를 번역해야합니다.Django ORM 쿼리, manytomany 자체 참조 왼쪽 조인 및

모델

class Publication_dependecy(models.Model): 
    def __str__(self): 
     return(str(self.id)) 

class Publication(models.Model): 
    def __str__(self): 
     return(self.name) 

    name = models.TextField() 


class Publication_relationship(models.Model): 
    def __str__(self): 
     return(self.publication_from + '#' + self,publication + '#' + self.publication_dependecy_id) 

    from_publication = models.ForeignKey(Publication, related_name='from_publication', on_delete=models.CASCADE) 
    to_publication = models.ForeignKey(Publication, related_name='to_publication', on_delete=models.CASCADE) 
    publication_dependecy = models.ForeignKey(Publication_dependecy, on_delete=models.CASCADE) 

SQL 쿼리 :

select Publication.id 
from Publication 
left join Publication_relationship on 
    Publication.id = Publication_relationship.from_publication 
where 
    publication_dependecy.id is NULL or Publication_dependecy.id = 1 
내가 Publication_relationship에없는 모든 출판물을 PIN이 필요

또는 그의 publication_dependecy이 publication_dependency 1 또는 NULL

답변

0
입니다 즉 1입니다
Publication.objects.filter(to_publication__publication_dependecy__isnull=True).filter(to_publication__publication_dependecy__id=1).values_list('id', Flat=True) 

귀하의 질의 일 것입니다. 의 의미 publication_dependency는 1입니다. 왜냐하면 publication_dependency는 정수 또는 charField 유형 값이 아니기 때문에 ID를 참조한다고 생각합니다. 즉 죄송합니다

+0

내가이 ORM을 어떻게 작동하는지 understant하지를 작동하는지 말해 : "선택은 다음과 같습니다 %의"% (이름, ",".join (가능))) django.core을. exceptions.FieldError : 'publication_relationship'키워드를 필드로 확인할 수 없습니다. 선택 사항은 다음과 같습니다 from_publication, id, name, related_to, relationship, to_publication – guibos

+0

@guibos 편집하십시오. 하지만 내가 전에했던 것처럼 일해야 해. –

0
from django.db.models import Q 

qs = (Publication.objects 
     .filter(Q(to_publication__publication_dependecy__isnull=True) | 
       Q(to_publication__publication_dependecy__id=1)) 
     .values_list('id', Flat=True) 
)