Django rest framework 同一个列表中的不同序列化程序
Django rest framework different serializer in the same list
我有这些型号:
class LogModel(models.Model):
created_by = models.ForeignKey(User, null=True, default=get_current_user, related_name="%(app_label)s_%(class)s")
created_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class FeedPost(LogModel):
recipients = models.ManyToManyField(User, blank=True)
class Meta:
abstract = True
class ArticleFeedPost(FeedPost):
article = models.TextField()
class QuestionFeedPost(FeedPost):
question = models.TextField()
votes = models.IntegerField()
我有这些序列化程序:
class ArticleFeedPostSerializer(serializers.ModelSerializer):
class Meta:
model = feed_models.ArticleFeedPost
class QuestionFeedPostSerializer(serializers.ModelSerializer):
class Meta:
model = feed_models.QuestionFeedPost
我想设置一个端点,其中 returns FeedPost 列表(文章和问题)。
问题是抽象模型不能序列化。
我怎样才能得到这份名单?
我在这里找到了解决方案:
django-rest-framework + django-polymorphic ModelSerialization
型号:
class FeedPost(LogModel, PolymorphicModel):
recipients = models.ManyToManyField(User, blank=True)
class Meta:
default_permissions = ('add', 'change', 'delete', 'view')
序列化器:
class FeedPostSerializer(serializers.ModelSerializer):
class Meta:
model = feed_models.FeedPost
def to_representation(self, obj):
if isinstance(obj, feed_models.ArticleFeedPost):
return ArticleFeedPostSerializer(obj, context=self.context).to_representation(obj)
elif isinstance(obj, feed_models.WorkoutFeedPost):
return QuestionFeedPostSerializer(obj, context=self.context).to_representation(obj)
return super(FeedPostSerializer, self).to_representation(obj)
我有这些型号:
class LogModel(models.Model):
created_by = models.ForeignKey(User, null=True, default=get_current_user, related_name="%(app_label)s_%(class)s")
created_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class FeedPost(LogModel):
recipients = models.ManyToManyField(User, blank=True)
class Meta:
abstract = True
class ArticleFeedPost(FeedPost):
article = models.TextField()
class QuestionFeedPost(FeedPost):
question = models.TextField()
votes = models.IntegerField()
我有这些序列化程序:
class ArticleFeedPostSerializer(serializers.ModelSerializer):
class Meta:
model = feed_models.ArticleFeedPost
class QuestionFeedPostSerializer(serializers.ModelSerializer):
class Meta:
model = feed_models.QuestionFeedPost
我想设置一个端点,其中 returns FeedPost 列表(文章和问题)。 问题是抽象模型不能序列化。 我怎样才能得到这份名单?
我在这里找到了解决方案: django-rest-framework + django-polymorphic ModelSerialization
型号:
class FeedPost(LogModel, PolymorphicModel):
recipients = models.ManyToManyField(User, blank=True)
class Meta:
default_permissions = ('add', 'change', 'delete', 'view')
序列化器:
class FeedPostSerializer(serializers.ModelSerializer):
class Meta:
model = feed_models.FeedPost
def to_representation(self, obj):
if isinstance(obj, feed_models.ArticleFeedPost):
return ArticleFeedPostSerializer(obj, context=self.context).to_representation(obj)
elif isinstance(obj, feed_models.WorkoutFeedPost):
return QuestionFeedPostSerializer(obj, context=self.context).to_representation(obj)
return super(FeedPostSerializer, self).to_representation(obj)