Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于外键的Django rest框架序列化_Django_Django Rest Framework_Django Serializer - Fatal编程技术网

基于外键的Django rest框架序列化

基于外键的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

我有一个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='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,并且只读了_.....它正在工作…谢谢你我很高兴它起了作用:)