2007-03-01 21:11:08 +08:00
"""
39. Fixtures .
Fixtures are a way of loading data into the database in bulk . Fixure data
can be stored in any serializable format ( including JSON and XML ) . Fixtures
are identified by name , and are stored in either a directory named ' fixtures '
in the application directory , on in one of the directories named in the
FIXTURE_DIRS setting .
"""
from django . db import models
class Article ( models . Model ) :
headline = models . CharField ( maxlength = 100 , default = ' Default headline ' )
pub_date = models . DateTimeField ( )
def __str__ ( self ) :
return self . headline
class Meta :
ordering = ( ' -pub_date ' , ' headline ' )
__test__ = { ' API_TESTS ' : """
>> > from django . core import management
>> > from django . db . models import get_app
# Reset the database representation of this app.
# This will return the database to a clean initial state.
>> > management . flush ( verbosity = 0 , interactive = False )
# Syncdb introduces 1 initial data object from initial_data.json.
>> > Article . objects . all ( )
[ < Article : Python program becomes self aware > ]
# Load fixture 1. Single JSON file, with two objects.
>> > management . load_data ( [ ' fixture1.json ' ] , verbosity = 0 )
>> > Article . objects . all ( )
[ < Article : Time to reform copyright > , < Article : Poker has no place on ESPN > , < Article : Python program becomes self aware > ]
# Load fixture 2. JSON file imported by default. Overwrites some existing objects
>> > management . load_data ( [ ' fixture2.json ' ] , verbosity = 0 )
>> > Article . objects . all ( )
[ < Article : Django conquers world ! > , < Article : Copyright is fine the way it is > , < Article : Poker has no place on ESPN > , < Article : Python program becomes self aware > ]
# Load fixture 3, XML format.
>> > management . load_data ( [ ' fixture3.xml ' ] , verbosity = 0 )
>> > 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 > ]
# Load a fixture that doesn't exist
>> > management . load_data ( [ ' unknown.json ' ] , verbosity = 0 )
# 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 > ]
# Reset the database representation of this app. This will delete all data.
>> > management . flush ( verbosity = 0 , interactive = False )
>> > Article . objects . all ( )
[ < Article : Python program becomes self aware > ]
# Load fixture 1 again, using format discovery
>> > management . load_data ( [ ' fixture1 ' ] , verbosity = 0 )
>> > Article . objects . all ( )
[ < Article : Time to reform copyright > , < Article : Poker has no place on ESPN > , < Article : Python program becomes self aware > ]
# Try to load fixture 2 using format discovery; this will fail
# because there are two fixture2's in the fixtures directory
>> > management . load_data ( [ ' fixture2 ' ] , verbosity = 0 ) # doctest: +ELLIPSIS
Multiple fixtures named ' fixture2 ' in ' .../fixtures ' . Aborting .
>> > Article . objects . all ( )
[ < Article : Time to reform copyright > , < Article : Poker has no place on ESPN > , < Article : Python program becomes self aware > ]
# Dump the current contents of the database as a JSON fixture
2007-03-13 08:29:21 +08:00
>> > print management . dump_data ( [ ' fixtures ' ] , format = ' json ' )
2007-03-01 21:11:08 +08:00
[ { " pk " : " 3 " , " model " : " fixtures.article " , " fields " : { " headline " : " Time to reform copyright " , " pub_date " : " 2006-06-16 13:00:00 " } } , { " pk " : " 2 " , " model " : " fixtures.article " , " fields " : { " headline " : " Poker has no place on ESPN " , " pub_date " : " 2006-06-16 12:00:00 " } } , { " pk " : " 1 " , " model " : " fixtures.article " , " fields " : { " headline " : " Python program becomes self aware " , " pub_date " : " 2006-06-16 11:00:00 " } } ]
""" }
from django . test import TestCase
class SampleTestCase ( TestCase ) :
fixtures = [ ' fixture1.json ' , ' fixture2.json ' ]
def testClassFixtures ( self ) :
" Check that test case has installed 4 fixture objects "
self . assertEqual ( Article . objects . count ( ) , 4 )
self . assertEquals ( str ( Article . objects . all ( ) ) , " [<Article: Django conquers world!>, <Article: Copyright is fine the way it is>, <Article: Poker has no place on ESPN>, <Article: Python program becomes self aware>] " )