Попытка присоединиться и получить неверные имена полей, заданные в select_related: 'audio_links'. Варианты: (нет) - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь выполнить объединение для двух таблиц - хотел бы вернуть все данные из ReleasesAll и AudioLinks.

Ошибка

FieldErrorat / api / release / 0

Неправильные имена полей, заданные в select_related: 'audio_links'.Возможные варианты: (нет)

models.py

class ReleasesAll(models.Model):
    id = models.IntegerField(primary_key=True)
    artist = models.CharField(max_length=255)
    all_artists = models.CharField(max_length=200)
    remixers = models.TextField(blank=True, null=True)
    format = models.CharField(max_length=80)
    title = models.CharField(max_length=255)
    label = models.CharField(max_length=255)
    label_no_country = models.CharField(max_length=255)

    class Meta:
        managed = False
        db_table = 'releases_all'

class AudioLinks(models.Model):
    release = models.ForeignKey('ReleasesAll', models.DO_NOTHING, db_column='release_id')
    track_number = models.IntegerField()
    track_name = models.CharField(max_length=500)
    url = models.CharField(max_length=500)
    m3u_link = models.TextField()
    type = models.CharField(max_length=50, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'audio_links'

views.py

class ListReleaseDetailView(generics.RetrieveUpdateDestroyAPIView):

    queryset = ReleasesAll.objects.all()
    serializer_class = ReleasesSerializer

    def get(self, request, *args, **kwargs):
        try:
            a_release = self.queryset.select_related('audio_links__release_id').get(pk=kwargs['release_id'])
            return Response(ReleasesSerializer(a_release).data)

        except ReleasesAll.DoesNotExist:
            return Response(
                data = {
                    "message": "{} does not exist".format(kwargs["release_id"])
                },
                status=status.HTTP_404_NOT_FOUND

Если я удалю select_related, тогда запрос будет работать

1 Ответ

0 голосов
/ 16 сентября 2018

Вы должны использовать prefetch_related для нескольких отношений.Также аргумент prefetch_related должен иметь значение related_name или audiolinks_set в вашем случае:

a_release = self.queryset.prefetch_related('audiolinks_set').get(pk=kwargs['release_id'])

См. документы :

select_related isограничено однозначными отношениями - внешний ключ и один-к-одному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...