Reputation: 753
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.
In ArtworkNode
I want to define main_artist
field:
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:
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?
Upvotes: 1
Views: 175
Reputation: 1820
You can use related name:
class ArtistArtwork(models.Model):
...
artwork = models.ForeignKey('gql_service.Artwork', related_name='artwork_artistartwork')
And then in the ArtworkService
class ArtworkInfo(object):
@property
def main_artist(self):
artist = self.artwork.objects.filter(artwork_artistartwork__is_main_artist=True).first()
return artist
Upvotes: 1
Reputation: 753
Did it as:
@property
def main_artist(self):
return self.artwork.artists.filter(
artistartwork__is_main_artist=True
).first()
Upvotes: 0