我有一个有很多前键的模型。我想仅使用 ids 进行 POST 并收到深度为 1 的响应。当我设置深度 = 1 时,它不起作用。
class State(models.Model):
name = models.CharField(max_length=255)
class City(models.Model):
state = models.ForeingKey(State, on_delete=models.PROTECT)
name = models.CharField(max_length=255)
class CitySerializer(serializers.ModelSerializer):
class Meta:
model = City
fields = '__all__'
我想发一些这样的文章
{
"state":1,
"name":"City Name"
}
并得到
{
"id":1,
"name":"City Name",
"state":{
"id":1,
"name": "State Name"
}
}
您是否尝试过制作
StateSerializer
并在 CitySerializer
中使用它?
class StateSerializer(serializers.ModelSerializer):
class Meta:
model = State
fields = '__all__'
class CitySerializer(serializers.ModelSerializer):
state = StateSerializer(read_only=True)
class Meta:
model = City
fields = '__all__'
查看文档此处。
修改 to_representation 方法以更改输出。
class Dimension(models.Model):
id = models.AutoField(primary_key=True)
height = models.CharField(max_length=8)
width = models.CharField(max_length=8)
length = models.CharField(max_length=8)
class Product(models.Model):
dimensions = models.OneToOneField(Dimension, blank=True, on_delete=models.RESTRICT)
class DimensionSerializer(ModelSerializer):
class Meta:
model = Dimension
fields = ["height","width","length"]
class ProductSerializer(ModelSerializer):
class Meta:
model = Product
fields = '__all__'
def to_representation(self, instance):
representation = super().to_representation(instance)
representation['dimensions'] = DimensionSerializer(instance.dimensions,many=False, read_only=True).data
return representation
有了这个你就可以发帖了。