簡體   English   中英

通過 model 獲取所有帶有過濾器的相關對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM