django - 如何从多对多关系中获取所有对象?
问题描述
所以我有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())
但我想获取查询集或艺术家对象列表。
解决方案
# 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
可能有一些重复,但您可以相应地处理这些。
推荐阅读
- reactjs - 如何将外部 .js 脚本添加到我的 index.html
- javascript - 包括不适用于绘图跟踪的功能 - js
- java - 如何在 Spring Boot 中创建实体时建立实体之间的链接?
- algorithm - 给定一个数字数组。在每一步,我们都可以在这个数组中选择一个像 N 这样的数字,并将 N 与这个数组中存在的另一个数字相加
- sql - 更改表以在 SQL 中添加检查条件
- r - 复制一段代码得到m个不同的输出
- python - Django 根据选定字段生成自定义 ID
- anaconda - Anaconda Cloud 上显示的最新版本
- testing - Groovy 元类覆盖 java.time.Year 静态方法 now() 但生产代码在运行时未使用 now() 的覆盖行为
- android - Android:不关闭 ExecutorService 会有问题吗?