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)
。
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)
。