【问题标题】:Problems with POST on DRFDRF 上的 POST 问题
【发布时间】:2022-02-07 21:48:22
【问题描述】:

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?

【问题讨论】:

    标签: django-rest-framework


    【解决方案1】:

    为您的POST 发送这个:

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

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

    【讨论】:

    • 如果我删除read_only=True,我会收到错误Invalid data. Expected a dictionary, but got int。如果我删除整行,它可以解决POST 的问题,谢谢。但是在GET 我知道只得到制造商id(没有name)。
    猜你喜欢
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 2021-04-16
    • 2020-12-10
    • 2021-10-09
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多