简体   繁体   English

通过 model 获取所有带有过滤器的相关对象

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

相关问题 Django通过“通过”关系表从模型中获取所有相关对象 - Django get all related objects from model with 'through' relationship tables 获取所有相关的 Django 模型对象 - Get all related Django model objects Django:如何通过另一个模型获取与模型相关的所有对象? - Django: How to get all objects related to a model by another model? Django过滤与另一个模型相关的模型对象 - Django filter model objects related to another model 如何在Django模型ForeignKey和OneToOneField中获取所有相关对象 - How to get all related objects in django model ForeignKey and OneToOneField 在不知道Django中模型名称的情况下获取所有相关对象 - Get all related objects without knowing model name in Django Django:获取所有对象和相关模型的第一条记录 - Django: Get all objects and the first record of a related model 如何通过发送与模型相关的 objects.all() 获取外键 - How to get the foreignkey with sending objects.all() related to the Model 获取所有对象的最新相关对象 - Get most recent related objects for all objects 如何获取查询集中每个 object 的所有相关对象,由 Sqlalchemy 中的另一个 model 过滤? - How to get all related objects of every object in a queryset, filtered by another model in Sqlalchemy?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM