django-rest-framework ManyToManyField创建和更新

fra*_*ran 4 python django django-models manytomanyfield django-rest-framework

我是Django的新手,所以我遇到了一些问题.我正在使用django-rest-framework.这些是我的模型类:

class Product(models.Model):
    name = models.CharField(max_length=100)
    price = models.FloatField()
    sizes = models.ManyToManyField(Size)
    ...
class Size(models.Model):
    name = models.CharField(max_length=100)
    ...
Run Code Online (Sandbox Code Playgroud)

我想要一个产品序列化器和一个允许创建其大小的产品的视图集.

class ProductSerializer(serializers.ModelSerializer):
    sizes = SizeSerializer(many=True)

    class Meta:
        model = Product
        fields = ('id', 'name', 'price', 'sizes')
        read_only_fields = ('id',)
Run Code Online (Sandbox Code Playgroud)

上面编写的序列化程序允许获得具有其大小的产品,但我无法创建或更新产品的大小.

我怎样才能实现目标?

fra*_*ran 10

我解决了创建一个序列化程序以获得具有嵌套大小的产品,以及一个仅使用id创建和更新产品的序列化程序.

class ProductSerializer(serializers.ModelSerializer):
    sizes = SizeSerializer(many=True) # nested objects

    class Meta:
        model = Product
        fields = ('id', 'name', 'price', 'sizes')
        read_only_fields = ('id',)


class ProductCreateUpdateSerializer(serializers.ModelSerializer):
    # no nested objects, it accepts only size ids
    class Meta:
        model = Product
        fields = ('id', 'name', 'price', 'sizes')
        read_only_fields = ('id',)
Run Code Online (Sandbox Code Playgroud)

也许客户端会有一些变化.