如何创建一个视图来检索url中具有匹配主键的所有对象?

2024-04-28 17:48:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个模型,形成一对多的关系。一个托盘具有多个与其关联的图像。你知道吗

你知道吗型号.py你知道吗

class Pallet(models.Model):

    pallet_id = models.IntegerField(primary_key=True)

    def __str__(self):
        return str(self.pallet_id)

    class Meta:
        ordering = ('pallet_id',)


class Image(models.Model):

    created = models.DateTimeField(auto_now_add=True)
    pallet = models.ForeignKey(Pallet, on_delete=models.CASCADE)
    image = models.FileField(upload_to="")

    def __str__(self):
        return str(self.created)

我正在尝试创建一个视图,在该视图中,我可以从url中获取与特定托盘id相关联的所有图像。你知道吗

你知道吗序列化程序.py你知道吗

class ImageSerializer(serializers.HyperlinkedModelSerializer):

    pallet = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

    class Meta:
        model = Image
        fields = '__all__'

class PalletSerializer(serializers.ModelSerializer):
    class Meta:
        model = Pallet
        fields = '__all__'

你知道吗网址.py你知道吗

urlpatterns = [
    url(r'^pallets/', include([
        url(r'^(?P<pk>[0-9]+)/$', views.PalletDetail.as_view(), name='pallet-detail'),
        ])),
]

我认为问题出在视图.py使用PalletDetail类。我对如何基于URL中的主键编写视图感到困惑。我尝试过使用**kwargs['pk'],但是使用它会使它成为基于函数的视图吗?如果是这样,混合使用基于类和基于函数的视图会是一种不好的形式吗?如何从基于类的视图中获得类似的行为?你知道吗

我真的很纠结于这里的观点:

你知道吗视图.py你知道吗

class PalletDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Image.objects.prefetch_related('pallet').all()
    serializer_class = ImageSerializer

Tags: pyimageself视图idtrueurlmodels
3条回答

你试过filter\u by()方法吗

queryset = Model.query.filter_by(id=pk).first()

在基于函数的视图中 pass pk参数 示例:

def Example_function(request, pk):
    queryset = Model.objects.filter(id=pk)

基于类的视图 获取url参数

pk = self.kwargs.get('pk')
queryset = Model.objects.filter(id=pk)

您以错误的方式使用序列化程序和视图。你知道吗

您的PalletDetail视图的问题是使用了错误的查询集。queryset应该返回Pallet对象,因为查找将在该queryset上(默认的查找字段是'pk')。此外,您还需要使用Pallet的序列化程序,因为它应该处理Pallet对象的数据。你知道吗

class PalletDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Pallet.objects.all()
    serializer_class = PalletSerializer

相关问题 更多 >