Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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
Python Django Rest框架-相关序列化程序_Python_Django_Serialization_Django Rest Framework - Fatal编程技术网

Python Django Rest框架-相关序列化程序

Python Django Rest框架-相关序列化程序,python,django,serialization,django-rest-framework,Python,Django,Serialization,Django Rest Framework,考虑到以下模型,其中两个模型与第一个模型有很多关系,如何为所有三个模型构造序列化程序 这就是Python中排序的重要性成为一个问题的地方 class Trail(models.Model): ''' Main model for this application. Contains all information for a particular trail ''' trail_name = models.CharField(max_length=150)

考虑到以下模型,其中两个模型与第一个模型有很多关系,如何为所有三个模型构造序列化程序

这就是Python中排序的重要性成为一个问题的地方

class Trail(models.Model):
    '''
    Main model for this application.  Contains all information for a particular trail
    '''
    trail_name = models.CharField(max_length=150)
    active = models.BooleanField(default=True)
    date_uploaded = models.DateTimeField(default=now())
    owner = models.ForeignKey(Account, default=1)


    class Meta:
        ordering = ('trail_name', )

class Activity(models.Model):
    '''
    A many to many join table to map an activity name to a trail.  A trail can have many
    activities
    '''
    name = models.CharField(max_length=40, unique=True)
    trails = models.ManyToManyField(Trail)

    class Meta:
        ordering = ('name', )


class Surface(models.Model):
    '''
    A many to many join table to map a surface type to many trails.  A trail can have many
    surface types.
    '''
    type = models.CharField(max_length=50, db_column='surface_type', unique=True)
    trails = models.ManyToManyField(Trail)

    class Meta:
        ordering = ('type', )
我在
serializers.py中有以下序列化程序:

class TrailSerializer(serializers.ModelSerializer):
    owner = AccountSerializer()
    activities = ActivitySerializer()

    class Meta:
        model = Trail
        fields = ('trail_name', 'active', 'date_uploaded', 'owner', 'activities', )


class ActivitySerializer(serializers.ModelSerializer):
    trails = TrailSerializer()

    class Meta:
        model = Activity
        fields = ('trails', 'name', )


class SurfaceSerializer(serializers.ModelSerializer):
    trails = TrailSerializer()

    class Meta:
        model = Surface
        fields = ('trails', 'type', )
我的问题是,除了创建另一个包含
ActivitySerializer和SurfaceSerializer
的文件外,我如何确保
TrailSerializer
在序列化过程中按预期工作,以便包括活动和表面引用?

使用(部分受DRF序列化程序启发的序列化库)。它通过允许嵌套模式作为字符串引用来解决这个问题

您可以直接使用或通过使用,这允许使用棉花糖,同时保持与REST框架的
序列化程序
类相同的API

我不知道如何仅使用DRFs序列化程序来实现相同的结果

另请参见:

使用(序列化库部分受DRF序列化程序启发)。它通过允许嵌套模式作为字符串引用来解决这个问题

您可以直接使用或通过使用,这允许使用棉花糖,同时保持与REST框架的
序列化程序
类相同的API

我不知道如何仅使用DRFs序列化程序来实现相同的结果

另见:

class AuthorSchema(Schema):
    # Make sure to use the 'only' or 'exclude' params to avoid infinite recursion
    books = fields.Nested('BookSchema', many=True, exclude=('author', ))
    class Meta:
        fields = ('id', 'name', 'books')

class BookSchema(Schema):
    author = fields.Nested(AuthorSchema, only=('id', 'name'))
    class Meta:
        fields = ('id', 'title', 'author')