[英]Get all related objects with filter on through model
I have the next database structure:我有下一个数据库结构:
class Artwork():
id = models.IntegerField(_('id'), primary_key=True)
artists = models.ManyToManyField('gql_service.Artist',
through='gql_service.ArtistArtwork')
class ArtistArtwork(models.Model):
artist = models.ForeignKey('gql_service.Artist')
artwork = models.ForeignKey('gql_service.Artwork')
is_main_artist = models.BooleanField(default=False)
class Artist(models.Model):
id = models.IntegerField(_('id'), primary_key=True)
is_main_artist
feature flag used to define is this artist main for this artwork. is_main_artist
特征标志用于定义该艺术家是否是该艺术品的主要艺术家。
In ArtworkNode
I want to define main_artist
field:在
ArtworkNode
我想定义main_artist
字段:
class ArtworkNode(PrimaryKeyMixin, DjangoObjectType):
main_artist = graphene.Field('escher.gql_service.schema.artist_node.ArtistNode')
def resolve_main_artist(self, _):
return ArtworkInfo(self).main_artist
And then in the ArtworkService
I can access artwork artists like:然后在
ArtworkService
中,我可以访问艺术品艺术家,例如:
class ArtworkInfo(object):
@property
def main_artist(self):
artist = self.artwork.artists.first()
return artist
Is there any way I can filter artists on ArtworkInfo
and get only one main artist or access values in ArtistArtwork
model?有什么方法可以过滤
ArtworkInfo
上的艺术家并仅获取一位主要艺术家或访问ArtistArtwork
model 中的值?
You can use related name:您可以使用相关名称:
class ArtistArtwork(models.Model):
...
artwork = models.ForeignKey('gql_service.Artwork', related_name='artwork_artistartwork')
And then in the ArtworkService
然后在
ArtworkService
class ArtworkInfo(object):
@property
def main_artist(self):
artist = self.artwork.objects.filter(artwork_artistartwork__is_main_artist=True).first()
return artist
Did it as:它是这样的:
@property
def main_artist(self):
return self.artwork.artists.filter(
artistartwork__is_main_artist=True
).first()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.