“如何修复”;默认情况下,`.create()`方法不支持可写嵌套字段";在Django API中

“如何修复”;默认情况下,`.create()`方法不支持可写嵌套字段";在Django API中,django,api,django-rest-framework,Django,Api,Django Rest Framework,我在为汽车创建新的评级时遇到了问题。 当我试图从邮递员处发送post请求以创建/添加特定汽车的新评级时,我收到错误: 默认情况下,`.create()`方法不支持可写嵌套字段。 这些是我的模型: class Car(models.Model): name = models.CharField(max_length=50) symbol = models.CharField(max_length = 5) def __str__(self): return self.name cla

我在为汽车创建新的评级时遇到了问题。 当我试图从邮递员处发送post请求以创建/添加特定汽车的新评级时,我收到错误:

默认情况下,`.create()`方法不支持可写嵌套字段。

这些是我的模型:

class Car(models.Model):
name = models.CharField(max_length=50)
symbol = models.CharField(max_length = 5)

def __str__(self):
    return self.name


class Type(models.Model):
    name = models.CharField(max_length = 50)
    fuel = models.CharField(max_length = 1)##1 or 2 for fuel type
    car = models.ManyToManyField(Car)

    def __str__(self):
        return self.name

class Rating(models.Model):
    rating = models.IntegerField(validators=[
            MaxValueValidator(10),
            MinValueValidator(0)
        ])
    car = models.ForeignKey(Car, on_delete=models.CASCADE)
    type = models.ForeignKey(Type, on_delete=models.CASCADE)

    def __int__(self):
        return self.rating
我的序列化程序:

class CarSerializer(serializers.ModelSerializer):
class Meta:
    model = Car
    fields = ('id','name')

class TypeSerializer(serializers.ModelSerializer):
    car = CarSerializer(many=True)
    class Meta:
        model = Type
        fields = ('id','name', 'fuel', 'car')
        #depth=2

class RatingSerializer(serializers.ModelSerializer):
    type = TypeSerializer()
    class Meta:
        model = Rating
        fields = ('id','rating', 'car', 'type')

    def create(self, validated_data):
    type_data = validated_data.pop('type')
    rating = Rating.objects.create(**validated_data)
    for t_data in type_data:
        Type.objects.create(rating=rating, **t_data)
    return rating
当我尝试对评级进行post请求时,例如:

{"rating":5, "car": 2,"type":{"id":1,"name":"OffRoad","fuel":"1","car":[{"id":2,"name":"Ford"}] } }
我得到:

The `.create()` method does not support writable nested fields by default.

如果可以的话请帮忙,我一整天都在努力解决这个问题。谢谢大家!

文档中的示例将为您指出解决此问题的正确方向。不过,错误消息确实描述了这里的问题:默认情况下,DRF序列化程序不支持可写嵌套字段-并且您有嵌套序列化程序(例如,
TypeSerializer
中的
CarSerializer
)。当我发现它给了我一个新的错误:NOT NULL约束失败:api_rating.type_id你能发布你的
create()
?@Yellowduck我已经将它添加到了上面的代码中我现在在
type=models.ForeignKey(type,on\u delete=models.CASCADE)
行中添加了NULL=True,但是这现在给出了一个新的错误:
create()**后面的参数必须是映射,而不是str