From what you've described, Django will certainly be able to help out
here. However, you're going to need to combine Django with some other
tools to solve all your problems.
Django is a server-side framework -- that is, it deals with the
database and web server that doles out content to whatever client asks
for it -- be it web browser, mobile app, or whatever. In terms of your
problem, that means that Django will be able to provide the interface
by which data is submitted to the server, store the data that is
collected, and provide a web presence to serve that data back to
users. Django doesn't have any built-in PDF generation capability, but
there are a lot of Python libraries that can be used to generate PDFs,
and it's easy to use Django to extract data and feed it into a PDF
generator. Django's documentation contains some simple examples of how
this can be done. [1]
[1]
https://docs.djangoproject.com/en/1.4/howto/outputting-pdf/
So - Django will be great on the server side. However, the bigger part
of your problem is the client side, and that's an area where Django
has deliberately avoided offering a solution, so you'll need to
combine Django with some client-side tools that are able to:
* Provide access to the camera and geolocation features of the device you're on
* Store data on the device while there is no live access to the server
* Cache updates on the mobile device while offline for delivery when
it comes back online.
* If necessary, synchronize updates made on the mobile device with
updates on the server
Features like geolocation and offline access can be implemented in
native HTML5 without the need to build an app at all; see
http://html5demos.com for some examples of the cool things you can do
on webpages with a modern browser. You can also use a HTML5-based
development approach embedded in a native app container; for example,
tools like Phonegap [2] and Appcelerator [3] are designed to help out
here.
[2]
http://phonegap.com/
[3]
http://www.appcelerator.com/
I can't say I know of any libraries that can be used to address the
synchronisation problem -- but then, I haven't really been looking for
one either. It wouldn't surprise me if there is something out there
that you could use, but if it does, it's got very little to do with
the Django side of the fence -- all Django cares about is that you're
using HTTP to communicate with the server.
So - in summary:
* Yes, Django could be a useful part of your tech stack to do what
you're describing
* However, it won't solve the problem on it's own -- you'll need to
pick a client side framework too.
Yours,
Russ Magee %-)