Index: django/core/management/commands/loaddata.py
===================================================================
--- django/core/management/commands/loaddata.py	(revision 7513)
+++ django/core/management/commands/loaddata.py	(working copy)
@@ -14,10 +14,42 @@
         make_option('--verbosity', action='store', dest='verbosity', default='1',
             type='choice', choices=['0', '1', '2'],
             help='Verbosity level; 0=minimal output, 1=normal output, 2=all output'),
+        make_option('--delete', action='store_true', dest='delete', default=False,
+            help='Deletes any items in the database which are not in the fixture'),
     )
     help = 'Installs the named fixture(s) in the database.'
     args = "fixture [fixture ...]"
 
+    def remove_objects_not_in(self, objects_to_keep, verbosity):
+        """
+        Deletes all the objects in the database that are not in objects_to_keep.
+        - objects_to_keep: A map where the keys are classes, and the values are a 
+         set of the objects of that class we should keep.
+        """
+        for class_ in objects_to_keep.keys():
+        
+            current = class_.objects.all()
+            current_ids = set( [x.id for x in current] )
+            keep_ids = set( [x.id for x in objects_to_keep[class_]] )
+
+            remove_these_ones = current_ids.difference(keep_ids)
+            if remove_these_ones:
+                
+                for obj in current:
+                    if obj.id in remove_these_ones:
+                        obj.delete()
+                        if verbosity >= 2:
+                            print "Deleted object: "+ unicode(obj)
+                                
+            if verbosity > 0 and remove_these_ones:
+                num_deleted = len(remove_these_ones)
+                if num_deleted > 1:
+                    type_deleted = unicode(class_._meta.verbose_name_plural)
+                else:
+                    type_deleted = unicode(class_._meta.verbose_name)
+
+                print "Deleted "+ str(num_deleted) +" "+ type_deleted
+    
     def handle(self, *fixture_labels, **options):
         from django.db.models import get_apps
         from django.core import serializers
@@ -28,7 +60,8 @@
 
         verbosity = int(options.get('verbosity', 1))
         show_traceback = options.get('traceback', False)
-
+        is_delete = options.get('delete', False)
+        
         # Keep a count of the installed objects and fixtures
         fixture_count = 0
         object_count = 0
@@ -97,11 +130,24 @@
                                 print "Installing %s fixture '%s' from %s." % \
                                     (format, fixture_name, humanize(fixture_dir))
                             try:
+                                
+                                objects_to_keep = {}
+                                
                                 objects = serializers.deserialize(format, fixture)
                                 for obj in objects:
                                     object_count += 1
-                                    models.add(obj.object.__class__)
+                                    
+                                    class_ = obj.object.__class__
+                                    if not class_ in objects_to_keep:
+                                        objects_to_keep[class_] = set()
+                                    objects_to_keep[class_].add(obj.object)
+                                    
+                                    models.add(class_)
                                     obj.save()
+                                
+                                if is_delete:
+                                    self.remove_objects_not_in(objects_to_keep, verbosity)
+
                                 label_found = True
                             except Exception, e:
                                 fixture.close()
Index: tests/modeltests/fixtures/models.py
===================================================================
--- tests/modeltests/fixtures/models.py	(revision 7512)
+++ tests/modeltests/fixtures/models.py	(working copy)
@@ -54,6 +54,11 @@
 # object list is unaffected
 >>> Article.objects.all()
 [<Article: XML identified as leading cause of cancer>, <Article: Django conquers world!>, <Article: Copyright is fine the way it is>, <Article: Poker on TV is great!>, <Article: Python program becomes self aware>]
+
+# Delete two existing objects
+>>> management.call_command('loaddata', 'fixture4.json', verbosity=0, delete=True)
+>>> Article.objects.all()
+[<Article: Django conquers world!>, <Article: Copyright is fine the way it is>, <Article: Poker on TV is great!>]
 """}
 
 # Database flushing does not work on MySQL with the default storage engine
Index: docs/django-admin.txt
===================================================================
--- docs/django-admin.txt	(revision 7512)
+++ docs/django-admin.txt	(working copy)
@@ -321,6 +321,17 @@
 
     django-admin.py loaddata --verbosity=2
 
+**New in Django development version**
+--delete
+~~~~~~~~
+
+Deletes any objects in the database which are not in the fixtures. If you run ``loaddata``
+with ``--delete``, after the operation the database will exactly match the contents
+of the fixtures.
+If you do not specify ``--delete`` new objects only present in the fixture will be created in
+the database, objects present in both will be updated, but no data will be removed from 
+the database.
+
 reset <appname appname ...>
 ---------------------------
 
