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

需要PolymorphicModel

型号:

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)