[英]Django get all related objects from model with 'through' relationship tables
[英]Get all related objects with filter on through model
我有下一個數據庫結構:
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
特征標志用於定義該藝術家是否是該藝術品的主要藝術家。
在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
然后在ArtworkService
中,我可以訪問藝術品藝術家,例如:
class ArtworkInfo(object):
@property
def main_artist(self):
artist = self.artwork.artists.first()
return artist
有什么方法可以過濾ArtworkInfo
上的藝術家並僅獲取一位主要藝術家或訪問ArtistArtwork
model 中的值?
您可以使用相關名稱:
class ArtistArtwork(models.Model):
...
artwork = models.ForeignKey('gql_service.Artwork', related_name='artwork_artistartwork')
然后在ArtworkService
class ArtworkInfo(object):
@property
def main_artist(self):
artist = self.artwork.objects.filter(artwork_artistartwork__is_main_artist=True).first()
return artist
它是這樣的:
@property
def main_artist(self):
return self.artwork.artists.filter(
artistartwork__is_main_artist=True
).first()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.