次のコードがあります。
def get_elements(self, obj):
book_elements = Element.objects.filter(book__pk=obj.id)
elements = Element.objects.filter( (Q(book__pk=obj.id) | Q(theme__pk=obj.theme_id)), ~Q(pk__in = [o.element_id for o in book_elements if o.element_id]))
serializer = GetElementSerializer(elements, context=self.context, many=True)
elements 変数は、Q オブジェクトの実装を使用したクエリです。ただし、まったく同じ値のセットを参照しますQ(book__pk=obj.id)
。2 つのクエリを実行する必要がないように、リスト内包表記book_elements
の内部を参照するにはどうすればよいですか。Q(book__pk=obj.id)
次のようなもの:
def get_elements(self, obj):
elements = Element.objects.filter( (Q(book__pk=obj.id) | Q(theme__pk=obj.theme_id)), ~Q(pk__in = [o.element_id for o in Q(book__pk=obj.id) if o.element_id]))
serializer = GetElementSerializer(elements, context=self.context, many=True)
要求された私の要素モデル:
class Element(models.Model):
name = models.CharField(max_length=100)
pub_date = models.DateTimeField('date published', auto_now_add=True)
mod_date = models.DateTimeField('modified date', auto_now=True)
book = models.ForeignKey(Book, blank=True, null=True, related_name='elements')
book_part = models.ForeignKey(BookPart)
theme = models.ForeignKey(Theme, blank=True, null=True, related_name='elements')
element = models.ForeignKey('self', blank=True, null=True, related_name='parent')
def __str__(self):
return self.name
どんな助けでも大歓迎です!