#django #django-queryset
Вопрос:
Я бы хотел первый! исполнитель для песни, которая должна быть из NL или БЫТЬ. В данный момент я запрашиваю у всех исполнителей песню. Это мой вопрос.
Song.objects.filter(artists__country__code__in=['NL', 'BE'])
а это мои модели:
class Song(Timestamps):
uuid = models.UUIDField('UUID', unique=True)
name = models.CharField('Name', max_length=255, blank=True)
artists = models.ManyToManyField(Artist)
...
class Artist(Timestamps):
uuid = models.UUIDField('UUID', unique=True)
name = models.CharField('Name', max_length=255, blank=True)
country = CountryField(blank=True, null=True)
...
Я знаю, что могу получить доступ к первому элементу поля «многие ко многим», как это:
song.artists.first()
Но я не знаю, как это сделать в фильтре запросов.
Есть какие-нибудь идеи?
Заранее спасибо.
Ответ №1:
Насколько я правильно понимаю вопрос, вам нужен первый исполнитель для каждой песни, так как в одной песне может быть несколько исполнителей. Мое решение может быть не лучшим, потому что оно просто возвращает значения объектов, но, возможно, оно поможет.
Song.objects.filter(artists__country__code__in=['NL', 'BE']).values("uuid", "name", "artists__name", "artists_uuid")
Это вернет набор запросов к справочникам с определенными значениями.
Ответ №2:
То, что вы пытаетесь сделать, — это получить первого исполнителя с кодом страны [«NL», «BE»]
Используйте что-то вроде этого
Song.objects.filter(artists__country__code__in=['NL', 'BE']).first().artists.first()
Ответ №3:
Похоже, вам нужен первый исполнитель, связанный с песней, принадлежащей указанным странам. Я думаю, что вы можете запросить саму Artist
модель и указать соответствующую песню.
Artist.objects.filter(country__code__in=['NL', 'BE'], song__name='My song').first()