基于外键的Django rest框架序列化
我有一个django模型,如下所示:基于外键的Django rest框架序列化,django,django-rest-framework,django-serializer,Django,Django Rest Framework,Django Serializer,我有一个django模型,如下所示: class A(models.Model): comments = models.CharField(max_length=200, blank=True) class B(models.Model): name = models.CharField(max_length=50, blank=True) class c(models.Model): a = models.ForeignKey(A, related_name='mo
class A(models.Model):
comments = models.CharField(max_length=200, blank=True)
class B(models.Model):
name = models.CharField(max_length=50, blank=True)
class c(models.Model):
a = models.ForeignKey(A, related_name='modelA')
b = models.ForeignKey(B, related_name='modelB')
class ASerializer(serializers.ModelSerializer):
class Meta:
model = A
class CSerializer(serializers.ModelSerializer):
class Meta:
model = C
class BSerializer(serializers.ModelSerializer):
modelB = CSerializer(many=True, read_only=True)
class Meta:
model = B
[
{
"id": 2,
"modelB": [
{
"id": 1,
"b": 2,
"a": 3
}
]
}
]
[
{
"id": 2,
"modelB": [
{
"id": 1,
"b": 2,
"a": [
{
"id": 1,
"comments": "",
}
]
}
]
}
]
class CSerializer(serializers.ModelSerializer):
a = ASerializer()
class Meta:
model = C
我有如下序列化程序:
class A(models.Model):
comments = models.CharField(max_length=200, blank=True)
class B(models.Model):
name = models.CharField(max_length=50, blank=True)
class c(models.Model):
a = models.ForeignKey(A, related_name='modelA')
b = models.ForeignKey(B, related_name='modelB')
class ASerializer(serializers.ModelSerializer):
class Meta:
model = A
class CSerializer(serializers.ModelSerializer):
class Meta:
model = C
class BSerializer(serializers.ModelSerializer):
modelB = CSerializer(many=True, read_only=True)
class Meta:
model = B
[
{
"id": 2,
"modelB": [
{
"id": 1,
"b": 2,
"a": 3
}
]
}
]
[
{
"id": 2,
"modelB": [
{
"id": 1,
"b": 2,
"a": [
{
"id": 1,
"comments": "",
}
]
}
]
}
]
class CSerializer(serializers.ModelSerializer):
a = ASerializer()
class Meta:
model = C
B序列化程序的工作原理如下:
class A(models.Model):
comments = models.CharField(max_length=200, blank=True)
class B(models.Model):
name = models.CharField(max_length=50, blank=True)
class c(models.Model):
a = models.ForeignKey(A, related_name='modelA')
b = models.ForeignKey(B, related_name='modelB')
class ASerializer(serializers.ModelSerializer):
class Meta:
model = A
class CSerializer(serializers.ModelSerializer):
class Meta:
model = C
class BSerializer(serializers.ModelSerializer):
modelB = CSerializer(many=True, read_only=True)
class Meta:
model = B
[
{
"id": 2,
"modelB": [
{
"id": 1,
"b": 2,
"a": 3
}
]
}
]
[
{
"id": 2,
"modelB": [
{
"id": 1,
"b": 2,
"a": [
{
"id": 1,
"comments": "",
}
]
}
]
}
]
class CSerializer(serializers.ModelSerializer):
a = ASerializer()
class Meta:
model = C
我必须调整什么才能使其结果如下:
class A(models.Model):
comments = models.CharField(max_length=200, blank=True)
class B(models.Model):
name = models.CharField(max_length=50, blank=True)
class c(models.Model):
a = models.ForeignKey(A, related_name='modelA')
b = models.ForeignKey(B, related_name='modelB')
class ASerializer(serializers.ModelSerializer):
class Meta:
model = A
class CSerializer(serializers.ModelSerializer):
class Meta:
model = C
class BSerializer(serializers.ModelSerializer):
modelB = CSerializer(many=True, read_only=True)
class Meta:
model = B
[
{
"id": 2,
"modelB": [
{
"id": 1,
"b": 2,
"a": 3
}
]
}
]
[
{
"id": 2,
"modelB": [
{
"id": 1,
"b": 2,
"a": [
{
"id": 1,
"comments": "",
}
]
}
]
}
]
class CSerializer(serializers.ModelSerializer):
a = ASerializer()
class Meta:
model = C
将您的C序列化程序更改如下:
class A(models.Model):
comments = models.CharField(max_length=200, blank=True)
class B(models.Model):
name = models.CharField(max_length=50, blank=True)
class c(models.Model):
a = models.ForeignKey(A, related_name='modelA')
b = models.ForeignKey(B, related_name='modelB')
class ASerializer(serializers.ModelSerializer):
class Meta:
model = A
class CSerializer(serializers.ModelSerializer):
class Meta:
model = C
class BSerializer(serializers.ModelSerializer):
modelB = CSerializer(many=True, read_only=True)
class Meta:
model = B
[
{
"id": 2,
"modelB": [
{
"id": 1,
"b": 2,
"a": 3
}
]
}
]
[
{
"id": 2,
"modelB": [
{
"id": 1,
"b": 2,
"a": [
{
"id": 1,
"comments": "",
}
]
}
]
}
]
class CSerializer(serializers.ModelSerializer):
a = ASerializer()
class Meta:
model = C
但这是一个外键关系,这和我已经在做的是一样的。我正在尝试第二段中的反向关系one@RogerFederer你测试过我的代码吗?它将生成您在问题中显示为所需输出的结果。哦,我很抱歉!我忘了删除many=True,并且只读了_.....它正在工作…谢谢你我很高兴它起了作用:)