Django通过多对多额外字段获取queryset



我在两个类之间有一个多对多关系对象,我需要通过多对多额外字段过滤查询集

那是我的三类

class Card(models.Model):
title = models.CharField(max_length=250 )
tags = models.ManyToManyField(Tag, through='Cards_Tags')
class Tag(models.Model):
tag = models.ForeignKey(Tag, on_delete=models.CASCADE)
class Cards_Tags(models.Model):
tag = models.ForeignKey(Tag, on_delete=models.CASCADE)
card = models.ForeignKey(Card, on_delete=models.CASCADE)
field = models.CharField( max_length=25, blank=True )

如果我使用它工作,但它返回一个Cards_Tags的查询集,我需要与Tags对象相同的结果

developers = Cards_Tags.objects.filter(card=obj, field='developer')

如何获取Cards_Tags中m2m关系的字段='developer'的Tags queryset?

您可以使用进行过滤

Tag.objects.filter(cards_tags__card=obj, cards_tags__field='developer')

或者你可以通过ManyToManyField:

obj.tags.filter(cards_tags__field='developer')

注意:Django中的模型是用PascalCase编写的,而不是用snake_case,因此,您可能希望将模型从Cards_Tags重命名为CardTag。在这种情况下,您使用obj.tags.filter(cardtag__field='developer')进行过滤

最新更新