diff --git a/FOSSDB_web/apps/fossdb/admin.py b/FOSSDB_web/apps/fossdb/admin.py index e69de29..21327ac 100644 --- a/FOSSDB_web/apps/fossdb/admin.py +++ b/FOSSDB_web/apps/fossdb/admin.py @@ -0,0 +1,32 @@ +from django.contrib import admin + +from .models import (HostingPlatform, License, ProgrammingLanguage, Project, + ProjectHostingPlatform, ProjectProgrammingLanguage, Tag) + + +class ProjectProgrammingLanguageInline(admin.TabularInline): + model = ProjectProgrammingLanguage + extra = 1 + + +class ProjectHostingPlatformInline(admin.TabularInline): + model = ProjectHostingPlatform + extra = 1 + + +class ProjectAdmin(admin.ModelAdmin): + inlines = [ProjectProgrammingLanguageInline, ProjectHostingPlatformInline] + list_display = ("author", "name", "_languages", "_hosting_platform") + + def _languages(self, object): + return " | ".join([i.language.language for i in object.projectprogramminglanguage_set.all()]) + + def _hosting_platform(self, object): + return " | ".join([i.hosting_platform.hosting_platform for i in object.projecthostingplatform_set.all()]) + + +admin.site.register(HostingPlatform) +admin.site.register(Project, ProjectAdmin) +admin.site.register(License) +admin.site.register(ProgrammingLanguage) +admin.site.register(Tag) diff --git a/FOSSDB_web/apps/fossdb/project/forms.py b/FOSSDB_web/apps/fossdb/forms.py similarity index 57% rename from FOSSDB_web/apps/fossdb/project/forms.py rename to FOSSDB_web/apps/fossdb/forms.py index 26bd551..9da02f4 100644 --- a/FOSSDB_web/apps/fossdb/project/forms.py +++ b/FOSSDB_web/apps/fossdb/forms.py @@ -1,11 +1,7 @@ from django import forms -from fossdb.hosting_platform.forms import HostingPlatformForm -from fossdb.hosting_platform.models import ProjectHostingPlatform -from fossdb.programming_language.forms import ProgrammingLanguageForm -from fossdb.programming_language.models import ProjectProgrammingLanguage - -from .models import Project +from .models import (HostingPlatform, License, ProgrammingLanguage, Project, + ProjectHostingPlatform, ProjectProgrammingLanguage) class ProjectForm(forms.ModelForm): @@ -27,13 +23,18 @@ class ProjectForm(forms.ModelForm): } -ProjectHostingPlatformFormSet = forms.inlineformset_factory( - Project, - ProjectHostingPlatform, - form=HostingPlatformForm, - extra=1, - can_delete=False -) +class LicenseForm(forms.ModelForm): + class Meta: + model = License + fields = ["short_name", "full_name", "url", "description"] + + +class ProgrammingLanguageForm(forms.ModelForm): + percentage = forms.IntegerField(min_value=0, max_value=100) + + class Meta: + model = ProgrammingLanguage + fields = ["language", "percentage"] ProjectProgrammingLanguageFormSet = forms.inlineformset_factory( @@ -43,3 +44,20 @@ ProjectProgrammingLanguageFormSet = forms.inlineformset_factory( extra=1, can_delete=True, ) + + +class HostingPlatformForm(forms.ModelForm): + url = forms.URLField() + + class Meta: + model = HostingPlatform + fields = ["hosting_platform", "url"] + + +ProjectHostingPlatformFormSet = forms.inlineformset_factory( + Project, + ProjectHostingPlatform, + form=HostingPlatformForm, + extra=1, + can_delete=False +) diff --git a/FOSSDB_web/apps/fossdb/hosting_platform/__init__.py b/FOSSDB_web/apps/fossdb/hosting_platform/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/hosting_platform/admin.py b/FOSSDB_web/apps/fossdb/hosting_platform/admin.py deleted file mode 100644 index 22ac739..0000000 --- a/FOSSDB_web/apps/fossdb/hosting_platform/admin.py +++ /dev/null @@ -1,11 +0,0 @@ -from django.contrib import admin - -from .models import HostingPlatform, ProjectHostingPlatform - - -class ProjectHostingPlatformInline(admin.TabularInline): - model = ProjectHostingPlatform - extra = 1 - - -admin.site.register(HostingPlatform) diff --git a/FOSSDB_web/apps/fossdb/hosting_platform/apps.py b/FOSSDB_web/apps/fossdb/hosting_platform/apps.py deleted file mode 100644 index e041c8e..0000000 --- a/FOSSDB_web/apps/fossdb/hosting_platform/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class HostingPlatformConfig(AppConfig): - default_auto_field = "django.db.models.BigAutoField" - name = "fossdb.hosting_platform" diff --git a/FOSSDB_web/apps/fossdb/hosting_platform/forms.py b/FOSSDB_web/apps/fossdb/hosting_platform/forms.py deleted file mode 100644 index 661213f..0000000 --- a/FOSSDB_web/apps/fossdb/hosting_platform/forms.py +++ /dev/null @@ -1,11 +0,0 @@ -from django import forms - -from .models import HostingPlatform - - -class HostingPlatformForm(forms.ModelForm): - url = forms.URLField() - - class Meta: - model = HostingPlatform - fields = ["hosting_platform", "url"] diff --git a/FOSSDB_web/apps/fossdb/hosting_platform/migrations/__init__.py b/FOSSDB_web/apps/fossdb/hosting_platform/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/hosting_platform/models.py b/FOSSDB_web/apps/fossdb/hosting_platform/models.py deleted file mode 100644 index c401aa0..0000000 --- a/FOSSDB_web/apps/fossdb/hosting_platform/models.py +++ /dev/null @@ -1,17 +0,0 @@ -from django.db import models - - -class HostingPlatform(models.Model): - hosting_platform = models.CharField(max_length=100) - - def __str__(self): - return self.hosting_platform - - -class ProjectHostingPlatform(models.Model): - project = models.ForeignKey("Project", on_delete=models.CASCADE) - hosting_platform = models.ForeignKey(HostingPlatform, on_delete=models.CASCADE) - url = models.URLField() - - def __str__(self): - return f"{self.project} | {self.hosting_platform}" diff --git a/FOSSDB_web/apps/fossdb/hosting_platform/tests.py b/FOSSDB_web/apps/fossdb/hosting_platform/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/FOSSDB_web/apps/fossdb/hosting_platform/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/FOSSDB_web/apps/fossdb/hosting_platform/views.py b/FOSSDB_web/apps/fossdb/hosting_platform/views.py deleted file mode 100644 index 91ea44a..0000000 --- a/FOSSDB_web/apps/fossdb/hosting_platform/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/FOSSDB_web/apps/fossdb/license/__init__.py b/FOSSDB_web/apps/fossdb/license/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/license/admin.py b/FOSSDB_web/apps/fossdb/license/admin.py deleted file mode 100644 index 9908df0..0000000 --- a/FOSSDB_web/apps/fossdb/license/admin.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.contrib import admin - -from .models import License - -admin.site.register(License) diff --git a/FOSSDB_web/apps/fossdb/license/apps.py b/FOSSDB_web/apps/fossdb/license/apps.py deleted file mode 100644 index 4e1d259..0000000 --- a/FOSSDB_web/apps/fossdb/license/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class LicenseConfig(AppConfig): - default_auto_field = "django.db.models.BigAutoField" - name = "fossdb.license" diff --git a/FOSSDB_web/apps/fossdb/license/forms.py b/FOSSDB_web/apps/fossdb/license/forms.py deleted file mode 100644 index 0c180da..0000000 --- a/FOSSDB_web/apps/fossdb/license/forms.py +++ /dev/null @@ -1,9 +0,0 @@ -from django import forms - -from .models import License - - -class LicenseForm(forms.ModelForm): - class Meta: - model = License - fields = ["short_name", "full_name", "url", "description"] diff --git a/FOSSDB_web/apps/fossdb/license/migrations/__init__.py b/FOSSDB_web/apps/fossdb/license/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/license/models.py b/FOSSDB_web/apps/fossdb/license/models.py deleted file mode 100644 index 572a0b4..0000000 --- a/FOSSDB_web/apps/fossdb/license/models.py +++ /dev/null @@ -1,11 +0,0 @@ -from django.db import models - - -class License(models.Model): - short_name = models.CharField(max_length=50) - full_name = models.CharField(max_length=100, blank=True, default="") - url = models.URLField(blank=True, default="") - description = models.TextField(blank=True, default="") - - def __str__(self): - return self.short_name diff --git a/FOSSDB_web/apps/fossdb/license/tests.py b/FOSSDB_web/apps/fossdb/license/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/FOSSDB_web/apps/fossdb/license/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/FOSSDB_web/apps/fossdb/license/views.py b/FOSSDB_web/apps/fossdb/license/views.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/migrations/0001_initial.py b/FOSSDB_web/apps/fossdb/migrations/0001_initial.py new file mode 100644 index 0000000..33d8a96 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/migrations/0001_initial.py @@ -0,0 +1,99 @@ +# Generated by Django 4.1.7 on 2023-04-08 12:47 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='HostingPlatform', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('hosting_platform', models.CharField(max_length=100)), + ], + ), + migrations.CreateModel( + name='License', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('short_name', models.CharField(max_length=50)), + ('full_name', models.CharField(blank=True, default='', max_length=100)), + ('url', models.URLField(blank=True, default='')), + ('description', models.TextField(blank=True, default='')), + ], + ), + migrations.CreateModel( + name='ProgrammingLanguage', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('language', models.CharField(max_length=100)), + ], + ), + migrations.CreateModel( + name='Project', + fields=[ + ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=255)), + ('description', models.TextField(blank=True, default='')), + ('date_created', models.DateTimeField(auto_now_add=True)), + ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Tag', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ('description', models.TextField(blank=True, default='')), + ('icon', models.ImageField(blank=True, null=True, upload_to='types/icons/')), + ], + ), + migrations.CreateModel( + name='ProjectProgrammingLanguage', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('percentage', models.PositiveIntegerField()), + ('language', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.programminglanguage')), + ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.project')), + ], + ), + migrations.CreateModel( + name='ProjectHostingPlatform', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('url', models.URLField()), + ('hosting_platform', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.hostingplatform')), + ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.project')), + ], + ), + migrations.AddField( + model_name='project', + name='hosting_platform', + field=models.ManyToManyField(related_name='projects', through='fossdb.ProjectHostingPlatform', to='fossdb.hostingplatform'), + ), + migrations.AddField( + model_name='project', + name='licenses', + field=models.ManyToManyField(to='fossdb.license'), + ), + migrations.AddField( + model_name='project', + name='programming_languages', + field=models.ManyToManyField(related_name='projects', through='fossdb.ProjectProgrammingLanguage', to='fossdb.programminglanguage'), + ), + migrations.AddField( + model_name='project', + name='project_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='fossdb.tag'), + ), + ] diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py new file mode 100644 index 0000000..e1ae5ea --- /dev/null +++ b/FOSSDB_web/apps/fossdb/models.py @@ -0,0 +1,74 @@ +import uuid + +from django.conf import settings +from django.db import models + +User = settings.AUTH_USER_MODEL + + +class License(models.Model): + short_name = models.CharField(max_length=50) + full_name = models.CharField(max_length=100, blank=True, default="") + url = models.URLField(blank=True, default="") + description = models.TextField(blank=True, default="") + + def __str__(self): + return self.short_name + + +class HostingPlatform(models.Model): + hosting_platform = models.CharField(max_length=100) + + def __str__(self): + return self.hosting_platform + + +class ProgrammingLanguage(models.Model): + language = models.CharField(max_length=100) + + def __str__(self): + return self.language + + +class Tag(models.Model): + name = models.CharField(max_length=100) + description = models.TextField(blank=True, default="") + icon = models.ImageField(upload_to="types/icons/", null=True, blank=True) + + +class ProjectProgrammingLanguage(models.Model): + project = models.ForeignKey("Project", on_delete=models.CASCADE) + language = models.ForeignKey(ProgrammingLanguage, on_delete=models.CASCADE) + percentage = models.PositiveIntegerField() + + def __str__(self): + return f"{self.project} | {self.language} | {self.percentage}%" + + +class ProjectHostingPlatform(models.Model): + project = models.ForeignKey("Project", on_delete=models.CASCADE) + hosting_platform = models.ForeignKey(HostingPlatform, on_delete=models.CASCADE) + url = models.URLField() + + def __str__(self): + return f"{self.project} | {self.hosting_platform}" + + +class Project(models.Model): + uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + author = models.ForeignKey(User, on_delete=models.CASCADE) + name = models.CharField(max_length=255) + description = models.TextField(blank=True, default="") + licenses = models.ManyToManyField(License) + programming_languages = models.ManyToManyField(ProgrammingLanguage, through="ProjectProgrammingLanguage", related_name="projects") + hosting_platform = models.ManyToManyField(HostingPlatform, through="ProjectHostingPlatform", related_name="projects") + project_type = models.ForeignKey(Tag, on_delete=models.CASCADE, blank=True, null=True) + date_created = models.DateTimeField(auto_now_add=True) + + def save(self, *args, **kwargs): + if not self.uuid: + self.uuid = uuid.uuid5(uuid.NAMESPACE_URL, f"{self.author.username}-{self.name}") + super().save(*args, **kwargs) + + def __str__(self): + return f"{self.author} | {self.name}" diff --git a/FOSSDB_web/apps/fossdb/programming_language/__init__.py b/FOSSDB_web/apps/fossdb/programming_language/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/programming_language/admin.py b/FOSSDB_web/apps/fossdb/programming_language/admin.py deleted file mode 100644 index 74324bf..0000000 --- a/FOSSDB_web/apps/fossdb/programming_language/admin.py +++ /dev/null @@ -1,11 +0,0 @@ -from django.contrib import admin - -from .models import ProgrammingLanguage, ProjectProgrammingLanguage - - -class ProjectProgrammingLanguageInline(admin.TabularInline): - model = ProjectProgrammingLanguage - extra = 1 - - -admin.site.register(ProgrammingLanguage) diff --git a/FOSSDB_web/apps/fossdb/programming_language/apps.py b/FOSSDB_web/apps/fossdb/programming_language/apps.py deleted file mode 100644 index a460465..0000000 --- a/FOSSDB_web/apps/fossdb/programming_language/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class ProgrammingLanguageConfig(AppConfig): - default_auto_field = "django.db.models.BigAutoField" - name = "fossdb.programming_language" diff --git a/FOSSDB_web/apps/fossdb/programming_language/forms.py b/FOSSDB_web/apps/fossdb/programming_language/forms.py deleted file mode 100644 index 4478a51..0000000 --- a/FOSSDB_web/apps/fossdb/programming_language/forms.py +++ /dev/null @@ -1,11 +0,0 @@ -from django import forms - -from .models import ProgrammingLanguage - - -class ProgrammingLanguageForm(forms.ModelForm): - percentage = forms.IntegerField(min_value=0, max_value=100) - - class Meta: - model = ProgrammingLanguage - fields = ["language", "percentage"] diff --git a/FOSSDB_web/apps/fossdb/programming_language/migrations/__init__.py b/FOSSDB_web/apps/fossdb/programming_language/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/programming_language/models.py b/FOSSDB_web/apps/fossdb/programming_language/models.py deleted file mode 100644 index 9a624f1..0000000 --- a/FOSSDB_web/apps/fossdb/programming_language/models.py +++ /dev/null @@ -1,17 +0,0 @@ -from django.db import models - - -class ProgrammingLanguage(models.Model): - language = models.CharField(max_length=100) - - def __str__(self): - return self.language - - -class ProjectProgrammingLanguage(models.Model): - project = models.ForeignKey("Project", on_delete=models.CASCADE) - language = models.ForeignKey(ProgrammingLanguage, on_delete=models.CASCADE) - percentage = models.PositiveIntegerField() - - def __str__(self): - return f"{self.project} | {self.language} | {self.percentage}%" diff --git a/FOSSDB_web/apps/fossdb/programming_language/tests.py b/FOSSDB_web/apps/fossdb/programming_language/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/FOSSDB_web/apps/fossdb/programming_language/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/FOSSDB_web/apps/fossdb/programming_language/views.py b/FOSSDB_web/apps/fossdb/programming_language/views.py deleted file mode 100644 index 91ea44a..0000000 --- a/FOSSDB_web/apps/fossdb/programming_language/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/FOSSDB_web/apps/fossdb/project/__init__.py b/FOSSDB_web/apps/fossdb/project/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/project/admin.py b/FOSSDB_web/apps/fossdb/project/admin.py deleted file mode 100644 index 936ecd6..0000000 --- a/FOSSDB_web/apps/fossdb/project/admin.py +++ /dev/null @@ -1,20 +0,0 @@ -from django.contrib import admin - -from fossdb.hosting_platform.admin import ProjectHostingPlatformInline -from fossdb.programming_language.admin import ProjectProgrammingLanguageInline - -from .models import Project - - -class ProjectAdmin(admin.ModelAdmin): - inlines = [ProjectProgrammingLanguageInline, ProjectHostingPlatformInline] - list_display = ("author", "name", "_languages", "_hosting_platform") - - def _languages(self, object): - return " | ".join([i.language.language for i in object.projectprogramminglanguage_set.all()]) - - def _hosting_platform(self, object): - return " | ".join([i.hosting_platform.hosting_platform for i in object.projecthostingplatform_set.all()]) - - -admin.site.register(Project, ProjectAdmin) diff --git a/FOSSDB_web/apps/fossdb/project/apps.py b/FOSSDB_web/apps/fossdb/project/apps.py deleted file mode 100644 index a8017ec..0000000 --- a/FOSSDB_web/apps/fossdb/project/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class ProjectConfig(AppConfig): - default_auto_field = "django.db.models.BigAutoField" - name = "fossdb.project" diff --git a/FOSSDB_web/apps/fossdb/project/migrations/__init__.py b/FOSSDB_web/apps/fossdb/project/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/project/models.py b/FOSSDB_web/apps/fossdb/project/models.py deleted file mode 100644 index 37dd50e..0000000 --- a/FOSSDB_web/apps/fossdb/project/models.py +++ /dev/null @@ -1,33 +0,0 @@ -import uuid - -from django.conf import settings -from django.db import models - -from fossdb.hosting_platform.models import (HostingPlatform, - ProjectHostingPlatform) -from fossdb.license.models import License -from fossdb.programming_language.models import (ProgrammingLanguage, - ProjectProgrammingLanguage) -from fossdb.tag.models import Tag - -User = settings.AUTH_USER_MODEL - - -class Project(models.Model): - uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) - author = models.ForeignKey(User, on_delete=models.CASCADE) - name = models.CharField(max_length=255) - description = models.TextField(blank=True, default="") - licenses = models.ManyToManyField(License) - programming_languages = models.ManyToManyField(ProgrammingLanguage, through=ProjectProgrammingLanguage, related_name="projects") - hosting_platform = models.ManyToManyField(HostingPlatform, through=ProjectHostingPlatform, related_name="projects") - project_type = models.ForeignKey(Tag, on_delete=models.CASCADE, blank=True, null=True) - date_created = models.DateTimeField(auto_now_add=True) - - def save(self, *args, **kwargs): - if not self.uuid: - self.uuid = uuid.uuid5(uuid.NAMESPACE_URL, f"{self.author.username}-{self.name}") - super().save(*args, **kwargs) - - def __str__(self): - return f"{self.author} | {self.name}" diff --git a/FOSSDB_web/apps/fossdb/project/tests.py b/FOSSDB_web/apps/fossdb/project/tests.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/project/views.py b/FOSSDB_web/apps/fossdb/project/views.py deleted file mode 100644 index 11b33e6..0000000 --- a/FOSSDB_web/apps/fossdb/project/views.py +++ /dev/null @@ -1,45 +0,0 @@ - -from django.contrib.auth.decorators import login_required, permission_required -from django.shortcuts import redirect, render - -from .forms import (ProjectForm, ProjectHostingPlatformFormSet, - ProjectProgrammingLanguageFormSet) -from .models import Project - -# from fossdb.hosting_platform.forms import ProjectHostingPlatformFormSet -# from fossdb.programming_language.forms import ProjectProgrammingLanguageFormSet - - -@login_required(login_url="login/") -@permission_required("fossdb.add_post", login_url="login/", raise_exception=True) -def add_project(request): - if request.method == "POST": - project_form = ProjectForm(request.POST) - language_formset = ProjectProgrammingLanguageFormSet(request.POST, instance=Project()) - host_formset = ProjectHostingPlatformFormSet(request.POST, instance=Project()) - - if project_form.is_valid() and language_formset.is_valid() and host_formset.is_valid(): - project = project_form.save(commit=False) - project.author = request.user - project.save() - - language_formset.instance = project - language_formset.save() - - host_formset.instance = project - host_formset.save() - - project_form.save_m2m() - return redirect("/") - else: - project_form = ProjectForm() - language_formset = ProjectProgrammingLanguageFormSet() - host_formset = ProjectHostingPlatformFormSet() - - context = { - "title": "Add project", - "project_form": project_form, - "language_formset": language_formset, - "host_formset": host_formset, - } - return render(request, "fossdb/add_project.html", context) diff --git a/FOSSDB_web/apps/fossdb/tag/__init__.py b/FOSSDB_web/apps/fossdb/tag/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/tag/admin.py b/FOSSDB_web/apps/fossdb/tag/admin.py deleted file mode 100644 index 1fdb041..0000000 --- a/FOSSDB_web/apps/fossdb/tag/admin.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.contrib import admin - -from .models import Tag - -admin.site.register(Tag) diff --git a/FOSSDB_web/apps/fossdb/tag/apps.py b/FOSSDB_web/apps/fossdb/tag/apps.py deleted file mode 100644 index 5ce961f..0000000 --- a/FOSSDB_web/apps/fossdb/tag/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class TagConfig(AppConfig): - default_auto_field = "django.db.models.BigAutoField" - name = "fossdb.tag" diff --git a/FOSSDB_web/apps/fossdb/tag/migrations/__init__.py b/FOSSDB_web/apps/fossdb/tag/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/FOSSDB_web/apps/fossdb/tag/models.py b/FOSSDB_web/apps/fossdb/tag/models.py deleted file mode 100644 index 99ab5f3..0000000 --- a/FOSSDB_web/apps/fossdb/tag/models.py +++ /dev/null @@ -1,7 +0,0 @@ -from django.db import models - - -class Tag(models.Model): - name = models.CharField(max_length=100) - description = models.TextField(blank=True, default="") - icon = models.ImageField(upload_to="types/icons/", null=True, blank=True) diff --git a/FOSSDB_web/apps/fossdb/tag/tests.py b/FOSSDB_web/apps/fossdb/tag/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/FOSSDB_web/apps/fossdb/tag/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/FOSSDB_web/apps/fossdb/tag/views.py b/FOSSDB_web/apps/fossdb/tag/views.py deleted file mode 100644 index 91ea44a..0000000 --- a/FOSSDB_web/apps/fossdb/tag/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/FOSSDB_web/apps/fossdb/views.py b/FOSSDB_web/apps/fossdb/views.py index 0759545..19b6d09 100644 --- a/FOSSDB_web/apps/fossdb/views.py +++ b/FOSSDB_web/apps/fossdb/views.py @@ -1,6 +1,9 @@ -from django.shortcuts import render +from django.contrib.auth.decorators import login_required, permission_required +from django.shortcuts import redirect, render -from fossdb.models import Project +from .forms import (ProjectForm, ProjectHostingPlatformFormSet, + ProjectProgrammingLanguageFormSet) +from .models import Project def index(request): @@ -9,3 +12,38 @@ def index(request): "projects": Project.objects.all(), } return render(request, "fossdb/index.html", context) + + +@login_required(login_url="login/") +@permission_required("fossdb.add_post", login_url="login/", raise_exception=True) +def add_project(request): + if request.method == "POST": + project_form = ProjectForm(request.POST) + language_formset = ProjectProgrammingLanguageFormSet(request.POST, instance=Project()) + host_formset = ProjectHostingPlatformFormSet(request.POST, instance=Project()) + + if project_form.is_valid() and language_formset.is_valid() and host_formset.is_valid(): + project = project_form.save(commit=False) + project.author = request.user + project.save() + + language_formset.instance = project + language_formset.save() + + host_formset.instance = project + host_formset.save() + + project_form.save_m2m() + return redirect("/") + else: + project_form = ProjectForm() + language_formset = ProjectProgrammingLanguageFormSet() + host_formset = ProjectHostingPlatformFormSet() + + context = { + "title": "Add project", + "project_form": project_form, + "language_formset": language_formset, + "host_formset": host_formset, + } + return render(request, "fossdb/add_project.html", context) diff --git a/FOSSDB_web/settings.py b/FOSSDB_web/settings.py index fa5090e..0c10737 100644 --- a/FOSSDB_web/settings.py +++ b/FOSSDB_web/settings.py @@ -38,11 +38,6 @@ ALLOWED_HOSTS = config["ALLOWED_HOSTS"] INSTALLED_APPS = [ "account", "fossdb", - "fossdb.project", - "fossdb.license", - "fossdb.programming_language", - "fossdb.hosting_platform", - "fossdb.tag", "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes",