gpt4 book ai didi

django - 如何在 Django rest API 检索 View 中获取相关对象?

转载 作者:行者123 更新时间:2023-12-04 15:38:25 25 4
gpt4 key购买 nike

这里我有两个模型并且有Many-to-one 关系。在 ListPackageGallery 类中,我想列出所有上传到某个包的图像。

如何在这里查询某个特定包的图像?

我是 django rest 的新手。那么在这种情况下使用 generics API view 是否正确?

class Package(models.Model):
name = models.CharField(max_length=255,unique=True)
slug = AutoSlugField(populate_from='name')
package_desc = models.TextField()

class PackageGallery(models.Model):
package = models.ForeignKey(Package, on_delete=models.CASCADE,related_name='gallery')
image = models.ImageField(upload_to='package_gallery')

序列化器.py

class PackageGallerySerializer(serializers.ModelSerializer):
class Meta:
model = PackageGallery
fields = '__all__'


class PackageGalleryDetailSerializer(serializers.ModelSerializer):
class Meta:
model = Package
fields = '__all__'

View .py

class CreatePackageGallery(generics.CreateAPIView):
serializer_class = PackageGallerySerializer
queryset = PackageGallery.objects.all()


class ListAllGallery(generics.ListAPIView):
serializer_class = PackageGallerySerializer
queryset = PackageGallery.objects.all()


class ListPackageGallery(generics.RetrieveAPIView):
serializer_class = PackageGalleryDetailSerializer
lookup_field = 'slug'

def get_queryset(self):
return self.gallery.all() #i got stuck here

网址.py

path('create/gallery/',CreatePackageGallery.as_view(),name='create_package_gallery'),
path('list/all/gallery/',ListAllGallery.as_view(),name='list_all_gallery'),
path('list/<slug>/gallery/',ListPackageGallery.as_view(),name='list_package_gallery'),

Django Version: 2.2.7 Exception Type: AttributeError Exception Value: 'ListPackageGallery' object has no attribute 'gallery'

最佳答案

您可以使用 SerializerMethodField 返回关联图像的列表:

class PackageGalleryDetailSerializer(serializers.ModelSerializer):
images = serializers.SerializerMethodField()

class Meta:
model = Package
fields = '__all__'

def get_images(self, package):
return [
# Change this to meet your need e.g. `gallery.image.url`
gallery.image.name
for gallery in package.gallery.all()
]

此外,从 PackageGalleryPackagerelated_name 应该命名为例如galleries 更好地理解这种关系,因为它是多对一的。

您可以从 ListPackageGallery 中删除 get_queryset 方法,因为我们不需要任何过滤。

关于django - 如何在 Django rest API 检索 View 中获取相关对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58951496/

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