DRF 上 POST 的问题

Problems with POST on DRF

Django Rest 框架,PostgreSQL。

型号:

class Manufacturer(models.Model):
    name = models.CharField(max_length=128)

class Product(models.Model):
    name = models.CharField(max_length=64)
    manufacturer = models.ForeignKey(
        Manufacturer, on_delete=models.CASCADE, related_name="products"
    )

序列化程序:

class ManufacturerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Manufacturer
        fields = "__all__"

class ProductSerializer(serializers.ModelSerializer):
    manufacturer = ManufacturerSerializer(read_only=True)

    class Meta:
        model = Product
        fields = "__all__"

然后我发送一个 GET 请求,我得到以下响应:

{
    "id": 1,
    "manufacturer": {
        "id": 1,
        "name": "Manufacturer 1"
    },
    "name": "Product 1"
}

但后来我发送了一个 POST-请求,

{
    "name": "Product 2",
    "manufacturer_id": 1
}

我收到错误:

null value in column "manufacturer_id" of relation "api_product" violates not-null constraint
DETAIL:  Failing row contains (2, Product 2, null).

如何正确编写post-request?

为了您的POST发送这个:

{
    "name": "Product 2",
    "manufacturer": 1
}

您可能还需要删除整行 manufacturer = ManufacturerSerializer(read_only=True)