Internship Portal is intentionally designed as a solid starting point rather than a locked-down product. The three-app structure, service layer pattern, and signal-based automation make it straightforward to add new fields, introduce entirely new Django apps, swap the database backend, or hook into the notification system. This page walks through the most common extension scenarios.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/unesexact/internship-portal-django/llms.txt
Use this file to discover all available pages before exploring further.
Adding Profile Fields
Student and company profiles are defined on a singleProfile model in users/models.py. Adding a new field — for example, a student’s expected graduation year — requires a model change, a migration, a template update, and a view update.
Add the field to the Profile model
Open
users/models.py and add your new field under the appropriate section comment.Create and run the migration
Django’s migration framework will detect the new field and generate the corresponding schema change.
Update the edit profile template
Add the new input to
users/templates/users/edit_profile.html inside the student section of the form so it is presented to students when they edit their profile.Adding a New Internship Field
TheInternship model in internships/models.py follows exactly the same extension pattern. For example, adding a stipend field:
Switching to PostgreSQL
The default database backend is SQLite, configured inconfig/settings.py. For a production deployment, replace the DATABASES setting with a PostgreSQL connection.
Update DATABASES in config/settings.py
Replace the SQLite
DATABASES block with a PostgreSQL connection. Use os.environ to keep credentials out of source control.Adding a New Django App
When a new feature domain is large enough to warrant its own models, views, and URLs, create a new Django app.Scaffold the app
myapp/ directory with models.py, views.py, admin.py, apps.py, tests.py, and a migrations/ package.Register the app in INSTALLED_APPS
Open
config/settings.py and add the new app to the INSTALLED_APPS list:Create models, views, and URLs
Define your models in
myapp/models.py, create views in myapp/views.py, and wire them up in a new myapp/urls.py:Custom Notifications
TheNotification model in applications/models.py is a general-purpose in-app messaging mechanism. Any view, signal handler, or service function can create a notification for any user by calling Notification.objects.create() directly — no additional infrastructure is required.
messages feature between companies and students, you could notify the recipient whenever a new message arrives:
users.context_processors.notifications context processor, so new notification types appear without any additional template work.
Running Tests
Each app ships with atests.py file generated by Django’s startapp command. Run the full test suite with:
internships/services.py operate purely on the ORM and accept plain Python arguments, they are especially straightforward to test in isolation using Django’s TestCase — no view client or URL dispatch needed.
When adding file upload fields (like a new document type or avatar variant), ensure
MEDIA_ROOT is configured and Django’s media URL is included in development. This is already handled in config/urls.py via urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) — any new FileField or ImageField with a valid upload_to path will work automatically in development without additional configuration.