代码之家  ›  专栏  ›  技术社区  ›  Franco

正在尝试加入并获取select“相关的”“audio”“links”中给定的无效字段名。选项包括:(无)

  •  0
  • Franco  · 技术社区  · 7 年前

    错误

    字段错误位于/api/release/0

    select“相关的”“audio”“links”“中给定的字段名无效。”。选择

    模型.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'
    

    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 回复  |  直到 7 年前
        1
  •  3
  •   neverwalkaloner    7 年前

    你应该用 prefetch_related related_name 值,或 audiolinks_set

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

    看到了吗 docs :

    select_related仅限于单值关系-外键 一对一。

    推荐文章