Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试加入并获取select_related:';中给出的无效字段名;音频链接&x27;。选择是:(无)_Python_Django_Django Models_Django Rest Framework - Fatal编程技术网

Python 尝试加入并获取select_related:';中给出的无效字段名;音频链接&x27;。选择是:(无)

Python 尝试加入并获取select_related:';中给出的无效字段名;音频链接&x27;。选择是:(无),python,django,django-models,django-rest-framework,Python,Django,Django Models,Django Rest Framework,我正在尝试在两个表上进行连接-希望返回来自ReleasesAll和AudioLink的所有数据 错误 位于/api/release/0的字段错误 选择相关的“音频链接”中给出的字段名无效。选择 是:(无) 型号.py class ReleasesAll(models.Model): id = models.IntegerField(primary_key=True) artist = models.CharField(max_length=255) all_artists

我正在尝试在两个表上进行连接-希望返回来自ReleasesAll和AudioLink的所有数据

错误

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

选择相关的“音频链接”中给出的字段名无效。选择 是:(无)

型号.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'
视图.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
,那么查询就会起作用

您应该对多个关系使用
prefetch_related
。另外,
prefetch\u related
的参数应该是
related\u name
value,或者在您的情况下是
audiolinks\u set

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

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


您应该对多个关系使用
prefetch\u related
。另外,
prefetch\u related
的参数应该是
related\u name
value,或者在您的情况下是
audiolinks\u set

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

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


非常感谢。遗憾的是,此返回的
在ReleasesAll对象上找不到“audio\u links\u set”,因此,“audio\u links\u set”是预取相关()的无效参数。
@Franco抱歉。它应该是
audiolinks\u set
而不是
audio\u links\u set
。再次感谢@neverwalkoner。这将删除错误-它现在从
ReleasesAll
返回数据,但它仍然不会从
audiolinks
@Franco返回数据。您是否将
audiolinks\u set
添加为序列化器字段?检查docs:Serializer字段的这一部分是
类ReleasesSerializer(serializers.modelsserializer):类Meta:model=ReleasesAll字段='\uuuuuu all\uuuuuu'
谢谢。遗憾的是,此返回的
在ReleasesAll对象上找不到“audio\u links\u set”,因此,“audio\u links\u set”是预取相关()的无效参数。
@Franco抱歉。它应该是
audiolinks\u set
而不是
audio\u links\u set
。再次感谢@neverwalkoner。这将删除错误-它现在从
ReleasesAll
返回数据,但它仍然不会从
audiolinks
@Franco返回数据。您是否将
audiolinks\u set
添加为序列化器字段?检查docs:Serializer字段的这一部分是
class-releaseseserializer(serializers.ModelSerializer):class-Meta:model=ReleasesAll字段='\uuuuuuu-all\uuuuu'