2017-10-01 8 views
0

1つのクエリを翻訳する必要があります。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に含まれていないすべての出版物をretriveする必要が

または彼の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を参照していると思います。 "選択肢は以下のとおりです:%s" は%(名前、 "" .join(利用可能))) django.coreそれは私はそれがこのORMをどのように動作するかunderstantません

+0

は申し訳ありませんが動作するかどうかを教えてください。 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) 
)