├── .dockerignore ├── app ├── __init__.py ├── models.py ├── admin.py ├── tests.py ├── views.py └── apps.py ├── runtime.txt ├── createnshare ├── __init__.py ├── .env ├── asgi.py ├── wsgi.py ├── urls.py └── settings.py ├── createnshare-db-schema.png ├── Procfile ├── .gitignore ├── heroku.yml ├── requirements.txt ├── docker-compose.yml ├── Dockerfile ├── manage.py ├── Issue_Templates ├── bug_report.md ├── general_issue.md └── feature_request.md ├── PR_Template.md ├── LICENSE ├── .github └── workflows │ ├── prod.yaml │ └── dev.yaml ├── Contributing.md ├── README.md └── dotfile.dot /.dockerignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /runtime.txt: -------------------------------------------------------------------------------- 1 | python-3.9.4 -------------------------------------------------------------------------------- /createnshare/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | -------------------------------------------------------------------------------- /app/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /app/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /app/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | 3 | # Create your views here. 4 | -------------------------------------------------------------------------------- /createnshare-db-schema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chiraag-kakar/createnshare/HEAD/createnshare-db-schema.png -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | release: python manage.py migrate 2 | 3 | web: gunicorn createnshare.wsgi --log-file - 4 | 5 | worker: python manage.py rqworker default -------------------------------------------------------------------------------- /app/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class AppConfig(AppConfig): 5 | default_auto_field = 'django.db.models.BigAutoField' 6 | name = 'app' 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *~ 3 | /.vscode 4 | __pycache__ 5 | /__pycache__/ 6 | db.sqlite3 7 | /static 8 | .DS_Store 9 | /migrations/ 10 | createnshare/.env 11 | # Virtual Environments 12 | env/ 13 | myenv/ 14 | virtual/ 15 | v/ 16 | myvenv/ 17 | vir/ -------------------------------------------------------------------------------- /heroku.yml: -------------------------------------------------------------------------------- 1 | setup: 2 | addons: 3 | - plan: heroku-postgresql 4 | build: 5 | docker: 6 | web: Dockerfile 7 | release: 8 | image: web 9 | command: 10 | - python manage.py collectstatic --noinput 11 | run: 12 | web: gunicorn createnshare.wsgi -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | asgiref==3.5.0 2 | autopep8==1.6.0 3 | dj-database-url==0.5.0 4 | Django==4.0.1 5 | django-environ==0.8.1 6 | django-extensions==3.1.5 7 | django-heroku==0.3.1 8 | graphviz==0.19.1 9 | gunicorn==20.1.0 10 | psycopg2==2.9.3 11 | pycodestyle==2.8.0 12 | pydot==1.4.2 13 | pyparsing==3.0.7 14 | sqlparse==0.4.2 15 | toml==0.10.2 16 | tzdata==2021.5 17 | whitenoise==5.3.0 18 | -------------------------------------------------------------------------------- /createnshare/.env: -------------------------------------------------------------------------------- 1 | SECRET_KEY=django-insecure-%2ktj$5&th*!v^*5mw)1s6_s1nf)(+p!c%z4^v<m5c4p2p0a 2 | DB_ENGINE=django.db.backends.postgresql_psycopg2 3 | DB_NAME=createnshare-test-1 4 | DB_USER=postgres 5 | DB_PASSWORD=Chiraag@001 6 | DB_HOST=db 7 | DB_PORT=5432 8 | DATABASE_URL=postgres://nmgosibpspofxx:bf3caa8c2b1a2db913ce11a116ca60d46bccbe5d7ee871c6178e505a03079187@ec2-34-205-46-149.compute-1.amazonaws.com:5432/d4429ul1k862js -------------------------------------------------------------------------------- /createnshare/asgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | ASGI config for createnshare project. 3 | 4 | It exposes the ASGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/4.0/howto/deployment/asgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.asgi import get_asgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'createnshare.settings') 15 | 16 | application = get_asgi_application() 17 | -------------------------------------------------------------------------------- /createnshare/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for createnshare project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/4.0/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'createnshare.settings') 14 | application = get_wsgi_application() 15 | # Heroku 16 | from whitenoise import WhiteNoise 17 | application = WhiteNoise(application) 18 | 19 | 20 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.9' 2 | 3 | services: 4 | db: 5 | image: postgres 6 | volumes: 7 | - ./data/db:/var/lib/postgresql/data 8 | environment: 9 | - POSTGRES_DB=createnshare-test-1 10 | - POSTGRES_USER=postgres 11 | - POSTGRES_PASSWORD=Chiraag@001 12 | web: 13 | build: . 14 | env_file: createnshare/.env 15 | command: > 16 | sh -c "python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:8000" 17 | volumes: 18 | - .:/code 19 | ports: 20 | - "8000:8000" 21 | depends_on: 22 | - db -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # pull official base image 2 | FROM python:3.9.6-alpine 3 | 4 | # set work directory 5 | WORKDIR /usr/src/app 6 | 7 | # set environment variables 8 | ENV PYTHONDONTWRITEBYTECODE 1 9 | ENV PYTHONUNBUFFERED 1 10 | 11 | # install psycopg2 dependencies 12 | RUN apk update \ 13 | && apk add postgresql-dev gcc python3-dev musl-dev 14 | 15 | # install dependencies 16 | RUN pip install --upgrade pip 17 | COPY ./requirements.txt . 18 | RUN pip install -r requirements.txt 19 | 20 | # copy project 21 | COPY . . 22 | RUN python manage.py makemigrations app 23 | RUN python manage.py migrate app 24 | RUN python manage.py collectstatic --noinput --clear 25 | # EXPOSE 8000 26 | # Run application 27 | CMD gunicorn django_heroku.wsgi:application -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """Django's command-line utility for administrative tasks.""" 3 | import os 4 | import sys 5 | 6 | 7 | def main(): 8 | """Run administrative tasks.""" 9 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'createnshare.settings') 10 | try: 11 | from django.core.management import execute_from_command_line 12 | except ImportError as exc: 13 | raise ImportError( 14 | "Couldn't import Django. Are you sure it's installed and " 15 | "available on your PYTHONPATH environment variable? Did you " 16 | "forget to activate a virtual environment?" 17 | ) from exc 18 | execute_from_command_line(sys.argv) 19 | 20 | 21 | if __name__ == '__main__': 22 | main() 23 | -------------------------------------------------------------------------------- /Issue_Templates/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ### **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | ### **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | ### **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | ### **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | ### **Additional context** 27 | Add any other context about the problem here. 28 | 29 | 30 | 31 | 32 | **Note:** 33 | * If you want to work on an issue, you should check if it has already been assigned to anyone. -------------------------------------------------------------------------------- /createnshare/urls.py: -------------------------------------------------------------------------------- 1 | """createnshare URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/4.0/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: path('', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.urls import include, path 14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 15 | """ 16 | from django.contrib import admin 17 | from django.urls import path 18 | 19 | urlpatterns = [ 20 | path('admin/', admin.site.urls), 21 | ] 22 | -------------------------------------------------------------------------------- /PR_Template.md: -------------------------------------------------------------------------------- 1 | ## What is the change? 2 | Remove this line and add a description 3 | 4 | ## Related issue? 5 | Fixes: #issue_number 6 | 7 | 8 | ## How was it tested? 9 | Remove this line and tell us how the code was tested. 10 | 11 | ## Checklist: 12 | Before you create this PR, confirm all the requirements listed below by checking the checkboxes `[x]`: 13 | 14 | - [] Have you followed the [Contribution Guidelines](https://github.com/chiraag-kakar/sharenlearn/blob/master/Contributing.md) while contributing. 15 | - [] Have you checked there aren't other open [Pull Requests](https://github.com/chiraag-kakar/sharenlearn/pulls) for the same update/change? 16 | - [] Have you made corresponding changes to the documentation? 17 | - [] Your submission doesn't break any existing feature. 18 | - [] Have you tested the code before submission? 19 | 20 | ## Screenshots or Video: 21 | Add a screenshot or demo video if appropriate. -------------------------------------------------------------------------------- /Issue_Templates/general_issue.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: General issue 3 | about: Suggest an issue for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | # Prerequisites: 11 | 12 | Please answer the following questions for yourself before submitting an issue. **YOU MAY DELETE THE PREREQUISITES SECTION.** 13 | 14 | 15 | - [ ] I checked to make sure that this issue has not already been filed. 16 | 17 | - [ ] I'm reporting the issue to the correct repository (for multi-repository projects) **(optional)** 18 | 19 | 20 | 21 | # Expected Behavior: 22 | 23 | Please describe the behavior you are expecting. 24 | 25 | # Current Behavior: 26 | 27 | What is the current behavior? 28 | 29 | # Solution: 30 | 31 | Please describe what will you do to solve this issue or your approach to solve this issue. 32 | 33 | # Screenshots (optional): 34 | 35 | **Note:** 36 | * If you want to work on an issue, you should check if it has already been assigned to anyone. -------------------------------------------------------------------------------- /Issue_Templates/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ### Feature request- 11 | A clear and concise description of the feature. 12 | 13 | ### Is your feature request related to a problem? Please describe. (optional) 14 | A clear and concise description of what the problem is. 15 | 16 | ### Describe the solution you'd like 17 | A clear and concise description of what you want to happen. 18 | 19 | ### Describe alternatives you've considered 20 | A clear and concise description of any alternative solutions or features you've considered. 21 | 22 | ### Describe how this feature will be useful to our readers. 23 | A clear and concise description of how this feature will be useful for our other readers. 24 | 25 | ### Additional context 26 | Add any other context or screenshots about the feature request here. 27 | 28 |
29 | 30 | **Note:** 31 | * If you want to work on an issue, you should check if it has already been assigned to anyone. -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Chiraag Kakar 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.github/workflows/prod.yaml: -------------------------------------------------------------------------------- 1 | name: Main Workflow - Test and Deploy 2 | 3 | on: 4 | pull_request: 5 | branches: [main] 6 | push: 7 | branches: [main] 8 | #set environment variables 9 | env: 10 | HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }} 11 | HEROKU_APP_NAME: ${{ 'prod-createnshare' }} 12 | HEROKU_EMAIL: ${{ 'chiraag.kakar.22@gmail.com' }} 13 | 14 | jobs: 15 | health-checkup-job: #Check the healthy by running tests 16 | runs-on: ubuntu-latest 17 | strategy: 18 | max-parallel: 4 19 | matrix: 20 | python-version: [3.9.4] 21 | 22 | steps: 23 | - uses: actions/checkout@v2 24 | - name: Set up Python ${{ matrix.python-version }} 25 | uses: actions/setup-python@v2 26 | with: 27 | python-version: ${{ matrix.python-version }} 28 | - name: Install Dependencies 29 | run: | 30 | python -m pip install --upgrade pip 31 | pip install -r requirements.txt 32 | 33 | - name: Run migrations 34 | run: | 35 | python manage.py makemigrations --noinput 36 | python manage.py migrate --noinput 37 | python manage.py collectstatic --noinput --clear 38 | 39 | - name: Run Tests 40 | run: | 41 | python manage.py test app 42 | - name: Check Syntax #We are just testing the syntax in names app; pycodestyle uses pep8 conventions of max line length of 79 characters while Django recommends 119 characters 43 | run: pycodestyle --statistics app -------------------------------------------------------------------------------- /.github/workflows/dev.yaml: -------------------------------------------------------------------------------- 1 | name: Develop Workflow - Test and Deploy 2 | 3 | on: 4 | pull_request: 5 | branches: [develop] 6 | push: 7 | branches: [develop] 8 | #set environment variables 9 | env: 10 | HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }} 11 | HEROKU_APP_NAME: ${{ 'develop-createnshare' }} 12 | HEROKU_EMAIL: ${{ 'chiraag.kakar.22@gmail.com' }} 13 | 14 | jobs: 15 | health-checkup-job: #Check the healthy by running tests 16 | runs-on: ubuntu-latest 17 | strategy: 18 | max-parallel: 4 19 | matrix: 20 | python-version: [3.9.4] 21 | 22 | steps: 23 | - uses: actions/checkout@v2 24 | - name: Set up Python ${{ matrix.python-version }} 25 | uses: actions/setup-python@v2 26 | with: 27 | python-version: ${{ matrix.python-version }} 28 | - name: Install Dependencies 29 | run: | 30 | python -m pip install --upgrade pip 31 | pip install -r requirements.txt 32 | 33 | - name: Run migrations 34 | run: | 35 | python manage.py makemigrations --noinput 36 | python manage.py migrate --noinput 37 | python manage.py collectstatic --noinput --clear 38 | 39 | - name: Run Tests 40 | run: | 41 | python manage.py test app 42 | - name: Check Syntax #We are just testing the syntax in names app; pycodestyle uses pep8 conventions of max line length of 79 characters while Django recommends 119 characters 43 | run: pycodestyle --statistics app -------------------------------------------------------------------------------- /createnshare/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for createnshare project. 3 | 4 | Generated by 'django-admin startproject' using Django 4.0.1. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/4.0/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/4.0/ref/settings/ 11 | """ 12 | 13 | from pathlib import Path 14 | import django_heroku 15 | import environ 16 | import os 17 | # Build paths inside the project like this: BASE_DIR / 'subdir'. 18 | BASE_DIR = Path(__file__).resolve().parent.parent 19 | 20 | 21 | # Quick-start development settings - unsuitable for production 22 | # See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/ 23 | 24 | # SECURITY WARNING: keep the secret key used in production secret! 25 | # Initialise environment variables 26 | env = environ.Env() 27 | environ.Env.read_env() 28 | 29 | SECRET_KEY = env('SECRET_KEY') 30 | 31 | # SECURITY WARNING: don't run with debug turned on in production! 32 | DEBUG = True 33 | 34 | ALLOWED_HOSTS = ['*'] 35 | 36 | 37 | # Application definition 38 | 39 | GRAPH_MODELS = { 40 | 'all_applications': True, 41 | 'group_models': True, 42 | 'app_labels': ["app"], 43 | } 44 | INSTALLED_APPS = [ 45 | 'django.contrib.admin', 46 | 'django.contrib.auth', 47 | 'django.contrib.contenttypes', 48 | 'django.contrib.sessions', 49 | 'django.contrib.messages', 50 | 'django.contrib.staticfiles', 51 | 'app', 52 | 'django_extensions' 53 | ] 54 | 55 | MIDDLEWARE = [ 56 | 'django.middleware.security.SecurityMiddleware', 57 | 'django.contrib.sessions.middleware.SessionMiddleware', 58 | 'django.middleware.common.CommonMiddleware', 59 | 'django.middleware.csrf.CsrfViewMiddleware', 60 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 61 | 'django.contrib.messages.middleware.MessageMiddleware', 62 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 63 | 'whitenoise.middleware.WhiteNoiseMiddleware', # heroku 64 | ] 65 | 66 | ROOT_URLCONF = 'createnshare.urls' 67 | 68 | TEMPLATES = [ 69 | { 70 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 71 | 'DIRS': [], 72 | 'APP_DIRS': True, 73 | 'OPTIONS': { 74 | 'context_processors': [ 75 | 'django.template.context_processors.debug', 76 | 'django.template.context_processors.request', 77 | 'django.contrib.auth.context_processors.auth', 78 | 'django.contrib.messages.context_processors.messages', 79 | ], 80 | }, 81 | }, 82 | ] 83 | # AUTH_USER_MODEL = "app.UserProfile" 84 | 85 | WSGI_APPLICATION = 'createnshare.wsgi.application' 86 | 87 | 88 | # Database 89 | # https://docs.djangoproject.com/en/4.0/ref/settings/#databases 90 | 91 | # DATABASES = { 92 | # 'default': { 93 | # 'ENGINE': 'django.db.backends.sqlite3', 94 | # 'NAME': BASE_DIR / 'db.sqlite3', 95 | # } 96 | # } 97 | 98 | # Local DB Configuration 99 | # if os.getenv('GITHUB_WORKFLOW'): 100 | # DATABASES = { 101 | # 'default': { 102 | # 'ENGINE': 'django.db.backends.postgresql', 103 | # 'NAME': 'github-actions', 104 | # 'USER': 'postgres', 105 | # 'PASSWORD': 'postgres', 106 | # 'HOST': 'localhost', 107 | # 'PORT': '5432' 108 | # } 109 | # } 110 | # else: 111 | # DATABASES = { 112 | # 'default': { 113 | # 'ENGINE': 'django.db.backends.postgresql', 114 | # 'NAME': os.getenv('DB_NAME'), 115 | # 'USER': os.getenv('DB_USER'), 116 | # 'PASSWORD': os.getenv('DB_PASSWORD'), 117 | # 'HOST': os.getenv('DB_HOST'), 118 | # 'PORT': os.getenv('DB_PORT') 119 | # } 120 | # } 121 | 122 | # Production DB Configuration 123 | DATABASES = {} 124 | DATABASES['default'] = env('DATABASE_URL') 125 | # DATABASES['default'] = 'postgres://nmgosibpspofxx:bf3caa8c2b1a2db913ce11a116ca60d46bccbe5d7ee871c6178e505a03079187@ec2-34-205-46-149.compute-1.amazonaws.com:5432/d4429ul1k862js' 126 | 127 | 128 | 129 | # Password validation 130 | # https://docs.djangoproject.com/en/4.0/ref/settings/#auth-password-validators 131 | 132 | AUTH_PASSWORD_VALIDATORS = [ 133 | { 134 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 135 | }, 136 | { 137 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 138 | }, 139 | { 140 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 141 | }, 142 | { 143 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 144 | }, 145 | ] 146 | 147 | 148 | # Internationalization 149 | # https://docs.djangoproject.com/en/4.0/topics/i18n/ 150 | 151 | LANGUAGE_CODE = 'en-us' 152 | 153 | TIME_ZONE = 'UTC' 154 | 155 | USE_I18N = True 156 | 157 | USE_TZ = True 158 | 159 | 160 | # Static files (CSS, JavaScript, Images) 161 | # https://docs.djangoproject.com/en/4.0/howto/static-files/ 162 | 163 | STATIC_URL = 'static/' 164 | 165 | # Default primary key field type 166 | # https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field 167 | 168 | DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' 169 | STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' 170 | # Activate Django-Heroku. 171 | django_heroku.settings(locals()) 172 | -------------------------------------------------------------------------------- /Contributing.md: -------------------------------------------------------------------------------- 1 | # Contributing to this project 2 | 3 | Please take a moment to review this document in order to make the contribution 4 | process easy and effective for everyone involved. 5 | 6 | Following these guidelines helps to communicate that you respect the time of 7 | the developers managing and developing this open source project. In return, 8 | they should reciprocate that respect in addressing your issue or assessing 9 | patches and features. 10 | 11 | 12 | ## Using the [issue tracker]() 13 | 14 | The issue tracker is the preferred channel for [bug reports](#bugs), 15 | [features requests](#features) and [submitting pull 16 | requests](#pull-requests), but please respect the following restrictions: 17 | 18 | * Please **do not** use the issue tracker for personal support requests (use 19 | [Stack Overflow](http://stackoverflow.com) or IRC). 20 | 21 | * Please **do not** derail or troll issues. Keep the discussion on topic and 22 | respect the opinions of others. 23 | 24 | 25 | 26 | ## Bug reports 27 | 28 | A bug is a _demonstrable problem_ that is caused by the code in the repository. 29 | Good bug reports are extremely helpful - thank you! 30 | 31 | Guidelines for bug reports: 32 | 33 | 1. **Use the GitHub issue search** — check if the issue has already been 34 | reported. 35 | 36 | 2. **Check if the issue has been fixed** — try to reproduce it using the 37 | latest `master` or development branch in the repository. 38 | 39 | 3. **Isolate the problem** — create a [reduced test 40 | case](http://css-tricks.com/reduced-test-cases/) and a live example. 41 | 42 | A good bug report shouldn't leave others needing to chase you up for more 43 | information. Please try to be as detailed as possible in your report. What is 44 | your environment? What steps will reproduce the issue? What browser(s) and OS 45 | experience the problem? What would you expect to be the outcome? All these 46 | details will help people to fix any potential bugs. 47 | 48 | Example: 49 | 50 | > Short and descriptive example bug report title 51 | > 52 | > A summary of the issue and the browser/OS environment in which it occurs. If 53 | > suitable, include the steps required to reproduce the bug. 54 | > 55 | > 1. This is the first step 56 | > 2. This is the second step 57 | > 3. Further steps, etc. 58 | > 59 | > `` - a link to the reduced test case 60 | > 61 | > Any other information you want to share that is relevant to the issue being 62 | > reported. This might include the lines of code that you have identified as 63 | > causing the bug, and potential solutions (and your opinions on their 64 | > merits). 65 | 66 | 67 | 68 | ## Feature requests 69 | 70 | Feature requests are welcome. But take a moment to find out whether your idea 71 | fits with the scope and aims of the project. It's up to *you* to make a strong 72 | case to convince the project's developers of the merits of this feature. Please 73 | provide as much detail and context as possible. 74 | 75 | 76 | 77 | ## Pull requests 78 | 79 | Good pull requests - patches, improvements, new features - are a fantastic 80 | help. They should remain focused in scope and avoid containing unrelated 81 | commits. 82 | 83 | **Please ask first** before embarking on any significant pull request (e.g. 84 | implementing features, refactoring code, porting to a different language), 85 | otherwise you risk spending a lot of time working on something that the 86 | project's developers might not want to merge into the project. 87 | 88 | Please adhere to the coding conventions used throughout a project (indentation, 89 | accurate comments, etc.) and any other requirements (such as test coverage). 90 | 91 | Follow this process if you'd like your work considered for inclusion in the 92 | project: 93 | 94 | 1. [Fork](http://help.github.com/fork-a-repo/) the project, clone your fork, 95 | and configure the remotes: 96 | 97 | ```bash 98 | # Clone your fork of the repo into the current directory 99 | git clone https://github.com// 100 | # Navigate to the newly cloned directory 101 | cd 102 | # Assign the original repo to a remote called "upstream" 103 | git remote add upstream https://github.com// 104 | ``` 105 | 106 | 2. If you cloned a while ago, get the latest changes from upstream: 107 | 108 | ```bash 109 | git checkout 110 | git pull upstream 111 | ``` 112 | 113 | 3. Create a new topic branch (off the main project development branch) to 114 | contain your feature, change, or fix: 115 | 116 | ```bash 117 | git checkout -b 118 | ``` 119 | 120 | 4. Commit your changes in logical chunks. Please adhere to these [git commit 121 | message guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) 122 | or your code is unlikely be merged into the main project. Use Git's 123 | [interactive rebase](https://help.github.com/articles/interactive-rebase) 124 | feature to tidy up your commits before making them public. 125 | 126 | 5. Locally merge (or rebase) the upstream development branch into your topic branch: 127 | 128 | ```bash 129 | git pull [--rebase] upstream 130 | ``` 131 | 132 | 6. Push your topic branch up to your fork: 133 | 134 | ```bash 135 | git push origin 136 | ``` 137 | 138 | 7. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) 139 | with a clear title and description. 140 | 141 | **IMPORTANT**: By submitting a patch, you agree to allow the project owner to 142 | license your work under the same license as that used by the project. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # create n share 2 | 3 | 4 | --- 5 | 6 | 7 | 8 | [Click here to view the DB Schema](createnshare-db-schema.png) 9 | 10 | [![](https://img.shields.io/github/license/chiraag-kakar/createnshare?style=for-the-badge)]() 11 | [![](https://img.shields.io/tokei/lines/github/chiraag-kakar/createnshare?label=Lines%20of%20Code&style=for-the-badge)]() 12 | [![](https://img.shields.io/github/issues-raw/chiraag-kakar/createnshare?color=orange&style=for-the-badge)]() 13 | [![](https://img.shields.io/github/issues-closed/chiraag-kakar/createnshare?style=for-the-badge)]() 14 | [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=for-the-badge)](https://github.com/chiraag-kakar/createnshare/pulls) 15 | [![](https://img.shields.io/github/issues-pr-closed-raw/chiraag-kakar/createnshare?style=for-the-badge)]() 16 | [![](https://img.shields.io/github/issues-pr/chiraag-kakar/createnshare?style=for-the-badge)]() 17 | [![](https://img.shields.io/github/forks/chiraag-kakar/createnshare?style=for-the-badge)]() 18 | [![](https://img.shields.io/github/stars/chiraag-kakar/createnshare?style=for-the-badge)]() 19 | 20 | 21 | **Create N Share** is a No Code solution which gives users the ability to create any type of feature rich survey forms with ease. 22 | 23 | ### Goal 24 | 25 | To build a Software-As-A-Service that helps the surveyors get responses in real time. The data can also be exported, sliced and diced to find actionable insights. 26 | 27 | ### Tech Stack 28 | 29 | - HTML, CSS and Javascript 30 | - Python Django Framework 31 | - Docker, Github Actions 32 | 33 | Hit :star2: to show some :heart: 34 | 35 | ## Getting Started 36 | 37 | These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. 38 | 39 | ### Development Environment Setup: Windows 40 | 41 |
42 | 43 | Step 1: Downloading and Installing the Code Editor 44 | 45 |
46 | You can install any one of the following code editors. 47 |

48 |
53 | 54 | --- 55 | 56 |
57 | 58 | Step 2: Installing Python 3.9 59 | 60 |
61 | Download Python 3.9 62 |

63 |
    64 |
  • Download the Windows x86-64 executable installer for the 64-bit version of Windows
  • 65 |
  • Download the Windows x86 executable installer for the 32-bit version of Windows.
  • 66 |
  • Make sure to check 'Add Python 3.9 to Path' in the setup window of the Installer.
  • 67 |
68 | 69 | Verify the installation from the command prompt (Terminal) using the following command, 70 | 71 | ```bash 72 | python --version 73 | ``` 74 | 75 | Installed version of python will be printed. 76 |
77 | 78 | --- 79 | 80 |
81 | 82 | Step 3: Installing Git 83 | 84 |
85 | Download Git 86 |
87 | 88 | --- 89 | 90 |
91 | 92 | Step 4: Fork the Repository 93 | 94 |
95 | Click on to fork this repsository 96 |
97 | 98 | --- 99 | 100 |
101 | 102 | Step 5: Creating Project Directory 103 | 104 |
105 | Note: We're creating project directory on the desktop for easy and fast access. 106 |

107 | 108 | ```bash 109 | cd desktop 110 | 111 | mkdir myprojects 112 | 113 | cd myprojects 114 | ``` 115 |
116 | 117 | --- 118 | 119 |
120 | 121 | Step 6: Cloning Repository using Git 122 | 123 |
124 | 125 | ```bash 126 | git clone https://github.com/''/createnshare.git 127 | ``` 128 |
129 | 130 | --- 131 | 132 |
133 | 134 | Step 7: Change directory to createnshare 135 | 136 |
137 | 138 | ```bash 139 | cd createnshare 140 | ``` 141 |
142 | 143 | --- 144 | 145 |
146 | 147 | Step 8: Add a reference to the original repository 148 | 149 |
150 | 151 | ```bash 152 | git remote add upstream https://github.com/chiraag-kakar/createnshare.git 153 | ``` 154 |
155 | 156 | --- 157 | 158 |
159 | 160 | Step 9: Creating Virtual Environment 161 | 162 |
163 | Install virtualenv 164 |

165 | 166 | ```bash 167 | pip3 install virtualenv 168 | ``` 169 | 170 | Creating Virtual Environment named `myvenv` 171 | 172 | ```bash 173 | virtualenv myvenv -p python3.9 174 | ``` 175 | 176 | To Activate `myvenv` 177 | 178 | ```bash 179 | myvenv\Scripts\activate 180 | ``` 181 | 182 | To deactivate `myvenv` 183 | 184 | ```bash 185 | deactivate 186 | ``` 187 |
188 | 189 | --- 190 | 191 |
192 | 193 | Step 10: Installing Requirements 194 | 195 |
196 | Note: Before installing requirements, Make sure Virtual Environment is activated. 197 |

198 | 199 | ```bash 200 | pip install -r requirements.txt 201 | ``` 202 |
203 | 204 | --- 205 | 206 |
207 | 208 | Step 11: Making database migrations 209 | 210 |
211 | 212 | ```bash 213 | python manage.py makemigrations 214 | python manage.py migrate 215 | ``` 216 |
217 | 218 | --- 219 | 220 |
221 | 222 | Step 12: Creating superuser to access Admin Panel 223 | 224 |
225 | 226 | ```bash 227 | python manage.py createsuperuser 228 | ``` 229 |
230 | 231 | --- 232 | 233 |
234 | 235 | Step 13: Running the Project in local server 236 | 237 |
238 | Note: Before running the project in local server, Make sure you activate the Virtual Environment. 239 |

240 | 241 | ```bash 242 | python manage.py runserver 243 | ``` 244 |
245 | 246 | --- 247 | 248 | :bulb: Pro Tip! 249 | 250 | * Always keep your master branch in sync with the main repository byr running the following command on the local master branch. Refer this stackoverflow page. 251 | 252 | ```bash 253 | git pull upstream master 254 | ``` 255 | 256 | * Always create a new branch before making any changes. Never ever make any changes directly on the master branch. To create a **new** branch, 257 | 258 | ```bash 259 | git checkout -b '' 260 | ``` 261 | 262 | --- 263 | 264 | ## Congratulations on setting up the project locally. 265 | 266 | --- 267 | 268 | ## Contributing 269 | 270 | * Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. 271 | 272 | * For major changes, please open an issue first to discuss what you would like to change. 273 | 274 | * **Note:** Please take a moment to review the Contributing.md and Code of Conduct which provides the guidelines for contributing. 275 | 276 | * Fork the project. 277 | * Create your Feature Branch 278 | ```bash 279 | git checkout -b '' 280 | ``` 281 | * Stage your changes 282 | ```bash 283 | git add . 284 | ``` 285 | * Commit your changes 286 | ```bash 287 | git commit -m '' 288 | ``` 289 | * Push changes to remote 290 | ```bash 291 | git push origin '' 292 | ``` 293 | * Open a Pull Request 294 | 295 | --- 296 | 297 | ## Contributors 298 | 299 | 300 | 305 | 306 |
301 | 302 | 303 | 304 |
307 | 308 | --- 309 | 310 | 311 | ## Maintainers 312 | 313 | - [Chiraag Kakar](https://github.com/chiraag-kakar) 314 | - [Yogesh Jha](https://github.com/hound77) 315 | 316 | 317 | ## License 318 | 319 | This project is licensed under the MIT License - see the LICENSE.md file for details. 320 | 321 | --- 322 | 323 |

Chiraag Kakar

324 |

325 | 326 | 327 | 328 |

329 | 330 | -------------------------------------------------------------------------------- /dotfile.dot: -------------------------------------------------------------------------------- 1 | digraph model_graph { 2 | // Dotfile by Django-Extensions graph_models 3 | // Created: 2022-02-03 12:56 4 | // Cli Options: -a 5 | 6 | fontname = "Roboto" 7 | fontsize = 8 8 | splines = true 9 | rankdir = "TB" 10 | 11 | node [ 12 | fontname = "Roboto" 13 | fontsize = 8 14 | shape = "plaintext" 15 | ] 16 | 17 | edge [ 18 | fontname = "Roboto" 19 | fontsize = 8 20 | ] 21 | 22 | // Labels 23 | subgraph cluster_django_contrib_admin { 24 | label=< 25 | 26 | 31 |
27 | 28 | django.contrib.admin 29 | 30 |
32 | > 33 | color=olivedrab4 34 | style="rounded" 35 | 36 | django_contrib_admin_models_LogEntry [label=< 37 | 38 | 42 | 43 | 44 | 49 | 50 | 51 | 52 | 57 | 58 | 59 | 60 | 65 | 66 | 67 | 68 | 73 | 74 | 75 | 76 | 81 | 82 | 83 | 84 | 89 | 90 | 91 | 92 | 97 | 98 | 99 | 100 | 105 | 106 | 107 |
39 | 40 | LogEntry 41 |
45 | id 46 | 47 | AutoField 48 |
53 | content_type 54 | 55 | ForeignKey (id) 56 |
61 | user 62 | 63 | ForeignKey (id) 64 |
69 | action_flag 70 | 71 | PositiveSmallIntegerField 72 |
77 | action_time 78 | 79 | DateTimeField 80 |
85 | change_message 86 | 87 | TextField 88 |
93 | object_id 94 | 95 | TextField 96 |
101 | object_repr 102 | 103 | CharField 104 |
108 | >] 109 | 110 | } 111 | subgraph cluster_django_contrib_auth { 112 | label=< 113 | 114 | 119 |
115 | 116 | django.contrib.auth 117 | 118 |
120 | > 121 | color=olivedrab4 122 | style="rounded" 123 | 124 | django_contrib_auth_models_AbstractUser [label=< 125 | 126 | 130 | 131 | 132 | 137 | 138 | 139 | 140 | 145 | 146 | 147 | 148 | 153 | 154 | 155 | 156 | 161 | 162 | 163 | 164 | 169 | 170 | 171 | 172 | 177 | 178 | 179 | 180 | 185 | 186 | 187 | 188 | 193 | 194 | 195 | 196 | 201 | 202 | 203 | 204 | 209 | 210 | 211 |
127 | 128 | AbstractUser
<AbstractBaseUser,PermissionsMixin> 129 |
133 | date_joined 134 | 135 | DateTimeField 136 |
141 | email 142 | 143 | EmailField 144 |
149 | first_name 150 | 151 | CharField 152 |
157 | is_active 158 | 159 | BooleanField 160 |
165 | is_staff 166 | 167 | BooleanField 168 |
173 | is_superuser 174 | 175 | BooleanField 176 |
181 | last_login 182 | 183 | DateTimeField 184 |
189 | last_name 190 | 191 | CharField 192 |
197 | password 198 | 199 | CharField 200 |
205 | username 206 | 207 | CharField 208 |
212 | >] 213 | 214 | django_contrib_auth_models_Permission [label=< 215 | 216 | 220 | 221 | 222 | 227 | 228 | 229 | 230 | 235 | 236 | 237 | 238 | 243 | 244 | 245 | 246 | 251 | 252 | 253 |
217 | 218 | Permission 219 |
223 | id 224 | 225 | AutoField 226 |
231 | content_type 232 | 233 | ForeignKey (id) 234 |
239 | codename 240 | 241 | CharField 242 |
247 | name 248 | 249 | CharField 250 |
254 | >] 255 | 256 | django_contrib_auth_models_Group [label=< 257 | 258 | 262 | 263 | 264 | 269 | 270 | 271 | 272 | 277 | 278 | 279 |
259 | 260 | Group 261 |
265 | id 266 | 267 | AutoField 268 |
273 | name 274 | 275 | CharField 276 |
280 | >] 281 | 282 | django_contrib_auth_models_User [label=< 283 | 284 | 288 | 289 | 290 | 295 | 296 | 297 | 298 | 303 | 304 | 305 | 306 | 311 | 312 | 313 | 314 | 319 | 320 | 321 | 322 | 327 | 328 | 329 | 330 | 335 | 336 | 337 | 338 | 343 | 344 | 345 | 346 | 351 | 352 | 353 | 354 | 359 | 360 | 361 | 362 | 367 | 368 | 369 | 370 | 375 | 376 | 377 |
285 | 286 | User
<AbstractUser> 287 |
291 | id 292 | 293 | AutoField 294 |
299 | date_joined 300 | 301 | DateTimeField 302 |
307 | email 308 | 309 | EmailField 310 |
315 | first_name 316 | 317 | CharField 318 |
323 | is_active 324 | 325 | BooleanField 326 |
331 | is_staff 332 | 333 | BooleanField 334 |
339 | is_superuser 340 | 341 | BooleanField 342 |
347 | last_login 348 | 349 | DateTimeField 350 |
355 | last_name 356 | 357 | CharField 358 |
363 | password 364 | 365 | CharField 366 |
371 | username 372 | 373 | CharField 374 |
378 | >] 379 | 380 | } 381 | subgraph cluster_django_contrib_contenttypes { 382 | label=< 383 | 384 | 389 |
385 | 386 | django.contrib.contenttypes 387 | 388 |
390 | > 391 | color=olivedrab4 392 | style="rounded" 393 | 394 | django_contrib_contenttypes_models_ContentType [label=< 395 | 396 | 400 | 401 | 402 | 407 | 408 | 409 | 410 | 415 | 416 | 417 | 418 | 423 | 424 | 425 |
397 | 398 | ContentType 399 |
403 | id 404 | 405 | AutoField 406 |
411 | app_label 412 | 413 | CharField 414 |
419 | model 420 | 421 | CharField 422 |
426 | >] 427 | 428 | } 429 | subgraph cluster_django_contrib_sessions { 430 | label=< 431 | 432 | 437 |
433 | 434 | django.contrib.sessions 435 | 436 |
438 | > 439 | color=olivedrab4 440 | style="rounded" 441 | 442 | django_contrib_sessions_base_session_AbstractBaseSession [label=< 443 | 444 | 448 | 449 | 450 | 455 | 456 | 457 | 458 | 463 | 464 | 465 |
445 | 446 | AbstractBaseSession 447 |
451 | expire_date 452 | 453 | DateTimeField 454 |
459 | session_data 460 | 461 | TextField 462 |
466 | >] 467 | 468 | django_contrib_sessions_models_Session [label=< 469 | 470 | 474 | 475 | 476 | 481 | 482 | 483 | 484 | 489 | 490 | 491 | 492 | 497 | 498 | 499 |
471 | 472 | Session
<AbstractBaseSession> 473 |
477 | session_key 478 | 479 | CharField 480 |
485 | expire_date 486 | 487 | DateTimeField 488 |
493 | session_data 494 | 495 | TextField 496 |
500 | >] 501 | 502 | } 503 | subgraph cluster_app { 504 | label=< 505 | 506 | 511 |
507 | 508 | app 509 | 510 |
512 | > 513 | color=olivedrab4 514 | style="rounded" 515 | 516 | app_models_UserProfile [label=< 517 | 518 | 522 | 523 | 524 | 529 | 530 | 531 | 532 | 537 | 538 | 539 |
519 | 520 | UserProfile 521 |
525 | id 526 | 527 | BigAutoField 528 |
533 | user 534 | 535 | ForeignKey (id) 536 |
540 | >] 541 | 542 | app_models_Choices [label=< 543 | 544 | 548 | 549 | 550 | 555 | 556 | 557 | 558 | 563 | 564 | 565 | 566 | 571 | 572 | 573 |
545 | 546 | Choices 547 |
551 | id 552 | 553 | BigAutoField 554 |
559 | choice 560 | 561 | CharField 562 |
567 | is_answer 568 | 569 | BooleanField 570 |
574 | >] 575 | 576 | app_models_Questions [label=< 577 | 578 | 582 | 583 | 584 | 589 | 590 | 591 | 592 | 597 | 598 | 599 | 600 | 605 | 606 | 607 | 608 | 613 | 614 | 615 | 616 | 621 | 622 | 623 | 624 | 629 | 630 | 631 | 632 | 637 | 638 | 639 |
579 | 580 | Questions 581 |
585 | id 586 | 587 | BigAutoField 588 |
593 | answer_key 594 | 595 | CharField 596 |
601 | feedback 602 | 603 | CharField 604 |
609 | question 610 | 611 | CharField 612 |
617 | question_type 618 | 619 | CharField 620 |
625 | required 626 | 627 | BooleanField 628 |
633 | score 634 | 635 | IntegerField 636 |
640 | >] 641 | 642 | app_models_Answer [label=< 643 | 644 | 648 | 649 | 650 | 655 | 656 | 657 | 658 | 663 | 664 | 665 | 666 | 671 | 672 | 673 |
645 | 646 | Answer 647 |
651 | id 652 | 653 | BigAutoField 654 |
659 | answer_to 660 | 661 | ForeignKey (id) 662 |
667 | answer 668 | 669 | CharField 670 |
674 | >] 675 | 676 | app_models_Form [label=< 677 | 678 | 682 | 683 | 684 | 689 | 690 | 691 | 692 | 697 | 698 | 699 | 700 | 705 | 706 | 707 | 708 | 713 | 714 | 715 | 716 | 721 | 722 | 723 | 724 | 729 | 730 | 731 | 732 | 737 | 738 | 739 | 740 | 745 | 746 | 747 | 748 | 753 | 754 | 755 | 756 | 761 | 762 | 763 | 764 | 769 | 770 | 771 | 772 | 777 | 778 | 779 | 780 | 785 | 786 | 787 | 788 | 793 | 794 | 795 | 796 | 801 | 802 | 803 |
679 | 680 | Form 681 |
685 | id 686 | 687 | BigAutoField 688 |
693 | creator 694 | 695 | ForeignKey (id) 696 |
701 | allow_view_score 702 | 703 | BooleanField 704 |
709 | authenticated_responder 710 | 711 | BooleanField 712 |
717 | background_color 718 | 719 | CharField 720 |
725 | code 726 | 727 | CharField 728 |
733 | collect_email 734 | 735 | BooleanField 736 |
741 | confirmation_message 742 | 743 | CharField 744 |
749 | createdAt 750 | 751 | DateTimeField 752 |
757 | description 758 | 759 | CharField 760 |
765 | edit_after_submit 766 | 767 | BooleanField 768 |
773 | is_quiz 774 | 775 | BooleanField 776 |
781 | text_color 782 | 783 | CharField 784 |
789 | title 790 | 791 | CharField 792 |
797 | updatedAt 798 | 799 | DateTimeField 800 |
804 | >] 805 | 806 | app_models_Responses [label=< 807 | 808 | 812 | 813 | 814 | 819 | 820 | 821 | 822 | 827 | 828 | 829 | 830 | 835 | 836 | 837 | 838 | 843 | 844 | 845 | 846 | 851 | 852 | 853 | 854 | 859 | 860 | 861 |
809 | 810 | Responses 811 |
815 | id 816 | 817 | BigAutoField 818 |
823 | responder 824 | 825 | ForeignKey (id) 826 |
831 | response_to 832 | 833 | ForeignKey (id) 834 |
839 | responder_email 840 | 841 | EmailField 842 |
847 | responder_ip 848 | 849 | CharField 850 |
855 | response_code 856 | 857 | CharField 858 |
862 | >] 863 | 864 | } 865 | 866 | 867 | // Relations 868 | 869 | django_contrib_admin_models_LogEntry -> django_contrib_auth_models_User 870 | [label=" user (logentry)"] [arrowhead=none, arrowtail=dot, dir=both]; 871 | 872 | django_contrib_admin_models_LogEntry -> django_contrib_contenttypes_models_ContentType 873 | [label=" content_type (logentry)"] [arrowhead=none, arrowtail=dot, dir=both]; 874 | 875 | django_contrib_auth_base_user_AbstractBaseUser [label=< 876 | 877 | 880 |
878 | AbstractBaseUser 879 |
881 | >] 882 | django_contrib_auth_models_AbstractUser -> django_contrib_auth_base_user_AbstractBaseUser 883 | [label=" abstract\ninheritance"] [arrowhead=empty, arrowtail=none, dir=both]; 884 | django_contrib_auth_models_PermissionsMixin [label=< 885 | 886 | 889 |
887 | PermissionsMixin 888 |
890 | >] 891 | django_contrib_auth_models_AbstractUser -> django_contrib_auth_models_PermissionsMixin 892 | [label=" abstract\ninheritance"] [arrowhead=empty, arrowtail=none, dir=both]; 893 | 894 | django_contrib_auth_models_Permission -> django_contrib_contenttypes_models_ContentType 895 | [label=" content_type (permission)"] [arrowhead=none, arrowtail=dot, dir=both]; 896 | 897 | django_contrib_auth_models_Group -> django_contrib_auth_models_Permission 898 | [label=" permissions (group)"] [arrowhead=dot arrowtail=dot, dir=both]; 899 | 900 | django_contrib_auth_models_User -> django_contrib_auth_models_Group 901 | [label=" groups (user)"] [arrowhead=dot arrowtail=dot, dir=both]; 902 | 903 | django_contrib_auth_models_User -> django_contrib_auth_models_Permission 904 | [label=" user_permissions (user)"] [arrowhead=dot arrowtail=dot, dir=both]; 905 | 906 | django_contrib_auth_models_User -> django_contrib_auth_models_AbstractUser 907 | [label=" abstract\ninheritance"] [arrowhead=empty, arrowtail=none, dir=both]; 908 | 909 | 910 | 911 | django_contrib_sessions_models_Session -> django_contrib_sessions_base_session_AbstractBaseSession 912 | [label=" abstract\ninheritance"] [arrowhead=empty, arrowtail=none, dir=both]; 913 | 914 | 915 | app_models_UserProfile -> django_contrib_auth_models_User 916 | [label=" user (userprofile)"] [arrowhead=none, arrowtail=dot, dir=both]; 917 | 918 | app_models_Questions -> app_models_Choices 919 | [label=" choices (choices)"] [arrowhead=dot arrowtail=dot, dir=both]; 920 | 921 | app_models_Answer -> app_models_Questions 922 | [label=" answer_to (answer_to)"] [arrowhead=none, arrowtail=dot, dir=both]; 923 | 924 | app_models_Form -> app_models_UserProfile 925 | [label=" creator (creator)"] [arrowhead=none, arrowtail=dot, dir=both]; 926 | 927 | app_models_Form -> app_models_Questions 928 | [label=" questions (questions)"] [arrowhead=dot arrowtail=dot, dir=both]; 929 | 930 | app_models_Responses -> app_models_Form 931 | [label=" response_to (response_to)"] [arrowhead=none, arrowtail=dot, dir=both]; 932 | 933 | app_models_Responses -> app_models_UserProfile 934 | [label=" responder (responder)"] [arrowhead=none, arrowtail=dot, dir=both]; 935 | 936 | app_models_Responses -> app_models_Answer 937 | [label=" response (response)"] [arrowhead=dot arrowtail=dot, dir=both]; 938 | 939 | 940 | } 941 | --------------------------------------------------------------------------------