Django Rest如何调用引用对象下的对象?

dz6r00yl  于 2023-01-27  发布在  Go
关注(0)|答案(1)|浏览(144)

我不能调用导演下的电影。我想做一个页面,你点击导演的名字,它会显示由导演导演的电影列表。下面显示的是模型,序列化器和视图的代码。

models.py

class Director(models.Model):
    _id = models.AutoField(primary_key=True)
    firstname = models.CharField(max_length=100, null=True, blank=True)
    lastname = models.CharField(max_length=100, null=True, blank=True)
    
    
    def __str__(self):
        return "%s %s" % (self.firstname, self.lastname)

class Product(models.Model):
    _id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100, null=True, blank=True)
    image = models.ImageField(upload_to=upload_image_path, null=True, blank=True)
    description = models.TextField(null=True, blank=True)
    director = models.ForeignKey(Director, on_delete=models.CASCADE)
    
    def __str__(self):
        return self.name
serializers.py

class ProductSerializer(serializers.ModelSerializer):
    director = serializers.StringRelatedField()
    class Meta:
        model = Product
        fields = '__all__'

class DirectorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Director
        fields = '__all__'
views.py

@api_view(['GET'])
def getProducts(request):
    products = Product.objects.all()
    serializer = ProductSerializer(products, many=True)
    return Response(serializer.data)

@api_view(['GET'])
def getProduct(request, pk):
    product = Product.objects.get(_id=pk)
    serializer = ProductSerializer(product, many=False)
    return Response(serializer.data)

@api_view(['GET'])
def getDirector(request):
    director = Director.objects.all()
    serializer = DirectorSerializer(director, many=True)
    return Response(serializer.data)

我已经尝试了上面所示的。

e4eetjau

e4eetjau1#

views.py

@api_view(['GET'])
def getProductsByDirector(request, director_pk):
    products = Product.objects.filter(director_id=director_pk)
    serializer = ProductSerializer(products, many=True)
    return Response(serializer.data)

注意:你不需要在你的模型中添加“_id”字段,因为它是自动添加的。

相关问题