gpt4 book ai didi

python - 来自动态字段的外键资源

转载 作者:太空宇宙 更新时间:2023-11-04 05:53:17 26 4
gpt4 key购买 nike

我有一个名为 TrackMinResource 的 API 端点, 它返回音乐轨道的最小数据,包括作为 ArtistMinResource 返回的轨道的主要艺术家.以下是两者的定义:

class TrackMinResource(ModelResource):
artist = fields.ForeignKey(ArtistMinResource, 'artist', full=True)

class Meta:
queryset = Track.objects.all()
resource_name = 'track-min'
fields = ['id', 'artist', 'track_name', 'label', 'release_year', 'release_name']
include_resource_uri = False
cache = SimpleCache(public=True)

def dehydrate(self, bundle):
bundle.data['full_artist_name'] = bundle.obj.full_artist_name()
if bundle.obj.image_url != settings.NO_TRACK_IMAGE:
bundle.data['image_url'] = bundle.obj.image_url

class ArtistMinResource(ModelResource):
class Meta:
queryset = Artist.objects.all()
resource_name = 'artist-min'
fields = ['id', 'artist_name']
cache = SimpleCache(public=True)

def get_resource_uri(self, bundle_or_obj):
return '/api/v1/artist/' + str(bundle_or_obj.obj.id) + '/'

问题是,artist字段 Track (以前是 ForeignKey )现在是一个名为 main_artist 的模型方法(我稍微改变了数据库的结构,但我希望 API 返回与以前相同的数据)。因此,我收到此错误:

{"error": "The model '<Track: TrackName>' has an empty attribute 'artist' and doesn't allow a null value."}

如果我取出full=True来自 TrackMinResource 的“艺术家”字段并添加 null=True相反,我在返回的数据中获得了艺术家字段的空值。如果我然后在 dehydrate 中分配艺术家像这样:

bundle.data['artist'] = bundle.obj.main_artist()

...我只是在返回的 JSON 中获取艺术家姓名,而不是 dict代表一个 ArtistMinResource (以及我需要的相关 resource_uri s)。

知道如何获得这些 ArtistMinResource进入我的TrackMinResource ?我可以访问 ArtistMinResource使用 URL 端点并通过 ID 请求结果很好。是否有从 dehydrate 中获取结果的函数? TrackMinResource 的函数?

最佳答案

您可以像这样在 TrackMinResource 的脱水中使用您的 ArtistMinResource(假设 main_artist() 返回您的 ArtistMinResource 代表的对象):

artist_resource = ArtistMinResource()
artist_bundle = artist_resource.build_bundle(obj=bundle.obj.main_artist(), request=request)
artist_bundle = artist_resource.full_dehydrate(artist_bundle)
artist_json = artist_resource.serialize(request=request, data=artist_bundle, format='application/json')

artist_json 现在应该包含您的完整艺术家表示。另外,我很确定如果您传递请求并且它填充了内容类型 header ,则您不必传递格式。

关于python - 来自动态字段的外键资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29079906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com