The buffer in the GEOS django API will create a buffer using whatever units your current co-ordinate system uses.
If you're storing everything in 4326 (in lat/long degrees) then you will have to find some tricky way of converting KM to degrees. But now your buffer will get severely distorted the more north you go.
A better solution is to re-project your geometry into a projection that maintains area, and often that kind of projection can track units in meters.
For example, if you are creating buffered areas in North America, you can use this projection which uses meters http://spatialreference.org/ref/sr-org/7314/
Here is an example of how to do that using Django GEOS API:
from django.contrib.gis.geos import Point
# Defines a point in lat/long
p = Point(-70, 50)
# This projection defines lat/long coordinate system
p.srid = 4326
# Transform into the 7314 projection using the OGC WKT format to define that projection
p.transform('PROJCS["NA Lambert Azimuthal Equal Area",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["degree",0.0174532925199433]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["false_easting",0.0],PARAMETER["false_northing",0.0],PARAMETER["longitude_of_center",-100.0],PARAMETER["latitude_of_center",45.0],UNIT["meter",1.0]]')
# Creates a buffered polygon of 1000 meters in radius
poly = p.buffer(1000)