Python Django Rest框架-相关序列化程序
考虑到以下模型,其中两个模型与第一个模型有很多关系,如何为所有三个模型构造序列化程序 这就是Python中排序的重要性成为一个问题的地方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)
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')