old_contents: from django import forms
  from django.contrib.auth.models import User
  from rest_framework import serializers
  
  from .models import Content, Tag
  
  
  class TagSerializer(serializers.ModelSerializer):
      class Meta:
          model = Tag
  
  
  class UserSerializer(serializers.ModelSerializer):
      class Meta:
          model = User
          exclude = ('password',)
  
  
  class SimpleAuthorSerializer(serializers.ModelSerializer):
      class Meta:
          model = User
          fields = ('id', 'first_name', 'last_name')
  
  
  class ContentSerializer(serializers.ModelSerializer):
      url = serializers.HyperlinkedIdentityField(
          view_name='content-detail',
          lookup_field='pk'
      )
  
      class Meta:
          model = Content
          exclude = ('polymorphic_ctype',)
  
  
  class ContentSerializerReadOnly(ContentSerializer):
      tags = TagSerializer(many=True, required=False)
      authors = SimpleAuthorSerializer(many=True, required=False)
  
      
  class PolymorphicContentSerializerMixin(object):
      def to_native(self, value):
          if hasattr(value, 'get_serializer_class'):
              ThisSerializer = value.get_serializer_class()
          else:
              class ThisSerializer(serializers.ModelSerializer):
                  class Meta:
                      model = value.__class__
              
          serializer = ThisSerializer(context=self.context)
          return serializer.to_native(value)
  
  
  class PolymorphicContentSerializer(ContentSerializer, PolymorphicContentSerializerMixin):
      pass
  
  
  class PolymorphicContentSerializerReadOnly(ContentSerializerReadOnly, PolymorphicContentSerializerMixin):
      pass
  
  
new_contents: from django import forms
  from django.contrib.auth.models import User
  from rest_framework import serializers
  
  from .models import Content, Tag
  
  
  class TagSerializer(serializers.ModelSerializer):
      class Meta:
          model = Tag
  
  
  class UserSerializer(serializers.ModelSerializer):
      class Meta:
          model = User
          exclude = ('password',)
  
  
  class SimpleAuthorSerializer(serializers.ModelSerializer):
      class Meta:
          model = User
          fields = ('id', 'first_name', 'last_name')
  
  
  class ContentSerializer(serializers.ModelSerializer):
      url = serializers.HyperlinkedIdentityField(
          view_name='content-detail',
          lookup_field='pk'
      )
      tags = serializers.PrimaryKeyRelatedField(many=True, required=False)
      authors = serializers.PrimaryKeyRelatedField(many=True, required=False)
  
      class Meta:
          model = Content
          exclude = ('polymorphic_ctype',)
  
  
  class ContentSerializerReadOnly(ContentSerializer):
      tags = TagSerializer(many=True, required=False)
      authors = SimpleAuthorSerializer(many=True, required=False)
  
      
  class PolymorphicContentSerializerMixin(object):
      def to_native(self, value):
          if hasattr(value, 'get_serializer_class'):
              ThisSerializer = value.get_serializer_class()
          else:
              class ThisSerializer(serializers.ModelSerializer):
                  class Meta:
                      model = value.__class__
              
          serializer = ThisSerializer(context=self.context)
          return serializer.to_native(value)
  
  
  class PolymorphicContentSerializer(ContentSerializer, PolymorphicContentSerializerMixin):
      pass
  
  
  class PolymorphicContentSerializerReadOnly(ContentSerializerReadOnly, PolymorphicContentSerializerMixin):
      pass
  
  
subject: Allow for empty tags and authors on `ContentSerializer`