Python 尝试加入并获取select_related:';中给出的无效字段名;音频链接&x27;。选择是:(无)
我正在尝试在两个表上进行连接-希望返回来自ReleasesAll和AudioLink的所有数据 错误 位于/api/release/0的字段错误 选择相关的“音频链接”中给出的字段名无效。选择 是:(无) 型号.pyPython 尝试加入并获取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
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'