首页 > 解决方案 > 如何从多对多关系中获取所有对象?

问题描述

所以我有2个模型:

class Artist(models.Model):
    """Artist model."""
    name = models.CharField('Artist name', max_length=255)
    genre = models.CharField('Music genre', max_length=255)
class Event(models.Model):
    """Event model."""
    name = models.CharField('Event name', max_length=255)
    description = models.TextField('Description')
    localization_name = models.CharField('Localization name', max_length=255)
    longitude = models.FloatField('Longitude', default=0.0)
    latitude = models.FloatField('Latitude', default=0.0)
    artists = models.ManyToManyField(Artist, verbose_name='Artists')
    date = models.DateTimeField('Event date')

我需要找一位艺术家,每一个和他一起参加活动的艺术家。我在艺术家模型上做了这个:

    @property
    def get_participate_artists(self):
        return list(self.event_set.all().values_list('artists__event__artists__name', 'artists__event__artists__genre', named=True).distinct())

但我想获取查询集或艺术家对象列表。

标签: djangodjango-modelsdjango-rest-framework

解决方案


# get one artist
first_artist = Artist.objects.first()

# get events where the artist was present
events = Event.objects.filter(artists__in=first_artist)

# create list containing all OTHER artist objects from those events
other_artists = []

for event in events:
    for artist in event.artists:
        if artist.id != first_artist.id:
            other_artists.append(artist)
        else:
            pass

可能有一些重复,但您可以相应地处理这些。


推荐阅读