Combined all fossdb models into 1 file

This commit is contained in:
Kristofers Solo 2023-06-28 16:19:40 +00:00
parent ad68430b94
commit 6ea8e2c3c3
15 changed files with 182 additions and 150 deletions

View File

@ -0,0 +1,19 @@
# Generated by Django 4.2.2 on 2023-06-28 16:17
import account.models
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('account', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='user',
name='profile_picture',
field=models.ImageField(default='profile-pics/default.jpg', upload_to=account.models.get_profile_pic_path),
),
]

View File

@ -1,11 +1,16 @@
from django.contrib import admin
from .hosting_platform.models import HostingPlatform, ProjectHostingPlatform
from .license.models import License
from .models import Project
from .operating_system.models import OperatingSystem, OperatingSystemVersion
from .programming_language.models import ProgrammingLanguage, ProjectProgrammingLanguage
from .tag.models import Tag
from .models import (
HostingPlatform,
License,
OperatingSystem,
OperatingSystemVersion,
ProgrammingLanguage,
Project,
ProjectHostingPlatform,
ProjectProgrammingLanguage,
Tag,
)
class ProjectProgrammingLanguageInline(admin.TabularInline):

View File

@ -1,6 +1,40 @@
from django import forms
from .models import Project
from .models import HostingPlatform, ProgrammingLanguage, Project, ProjectHostingPlatform, ProjectProgrammingLanguage
class HostingPlatformForm(forms.ModelForm):
class Meta:
model = ProjectHostingPlatform
fields = (
"url",
"hosting_platform",
)
widgets = {
"hosting_platform": forms.Select(
choices=HostingPlatform.objects.all(),
)
}
class ProgrammingLanguageForm(forms.ModelForm):
class Meta:
model = ProjectProgrammingLanguage
fields = (
"programming_language",
"percentage",
)
widgets = {
"programming_language": forms.Select(
choices=ProgrammingLanguage.objects.all(),
),
"percentage": forms.NumberInput(
attrs={
"min": "0",
"max": "100",
}
),
}
class ProjectForm(forms.ModelForm):

View File

@ -1,17 +0,0 @@
from django import forms
from .models import HostingPlatform, ProjectHostingPlatform
class HostingPlatformForm(forms.ModelForm):
class Meta:
model = ProjectHostingPlatform
fields = (
"url",
"hosting_platform",
)
widgets = {
"hosting_platform": forms.Select(
choices=HostingPlatform.objects.all(),
)
}

View File

@ -1,17 +0,0 @@
from django.db import models
class HostingPlatform(models.Model):
name = models.CharField(max_length=100, unique=True)
def __str__(self):
return self.name
class ProjectHostingPlatform(models.Model):
hosting_platform = models.ForeignKey(HostingPlatform, on_delete=models.CASCADE)
project = models.OneToOneField("Project", on_delete=models.CASCADE)
url = models.URLField(unique=True)
def __str__(self):
return self.url

View File

@ -1,11 +0,0 @@
from django.db import models
class License(models.Model):
short_name = models.CharField(max_length=50, unique=True)
full_name = models.CharField(max_length=100, unique=True)
url = models.URLField(blank=True, default="")
text = models.TextField(blank=True, default="")
def __str__(self):
return self.short_name

View File

@ -0,0 +1,29 @@
# Generated by Django 4.2.2 on 2023-06-28 16:17
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('fossdb', '0003_alter_projectprogramminglanguage_percentage'),
]
operations = [
migrations.AlterField(
model_name='tag',
name='icon',
field=models.ImageField(blank=True, null=True, upload_to='tags/icons/'),
),
migrations.CreateModel(
name='Star',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.project')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]

View File

@ -4,10 +4,60 @@ from django.conf import settings
from django.db import models
from .license.models import License
from .operating_system.models import OperatingSystemVersion
from .programming_language.models import ProgrammingLanguage
from .tag.models import Tag
class License(models.Model):
short_name = models.CharField(max_length=50, unique=True)
full_name = models.CharField(max_length=100, unique=True)
url = models.URLField(blank=True, default="")
text = models.TextField(blank=True, default="")
def __str__(self):
return self.short_name
class OperatingSystem(models.Model):
name = models.CharField(max_length=100, unique=True)
description = models.TextField(blank=True, default="")
def __str__(self):
return self.name
class OperatingSystemVersion(models.Model):
operating_system = models.ForeignKey(OperatingSystem, on_delete=models.CASCADE)
version = models.CharField(max_length=50, blank=True, default="")
codename = models.CharField(max_length=100, blank=True, default="")
is_lts = models.BooleanField(blank=True, default=False)
def __str__(self):
return f"{self.operating_system.name} {self.version} {'LTS' if self.is_lts else ''}"
class Meta:
constraints = (
models.UniqueConstraint(
fields=(
"operating_system",
"version",
),
name="unique_os_version",
),
)
class Tag(models.Model):
name = models.CharField(max_length=100, unique=True, db_index=True)
description = models.TextField(blank=True, default="")
icon = models.ImageField(upload_to="tags/icons/", null=True, blank=True)
def __str__(self):
return self.name
class ProgrammingLanguage(models.Model):
name = models.CharField(max_length=100, unique=True)
def __str__(self):
return self.name
class Project(models.Model):
@ -41,3 +91,33 @@ class Project(models.Model):
name="unique_owner_name",
),
)
class ProjectProgrammingLanguage(models.Model):
project = models.ForeignKey(Project, on_delete=models.CASCADE)
programming_language = models.ForeignKey(ProgrammingLanguage, on_delete=models.CASCADE)
percentage = models.PositiveIntegerField(blank=True, null=True)
def __str__(self):
return f"{self.project.owner}/{self.project.name} | {self.programming_language} | {self.percentage}%"
class HostingPlatform(models.Model):
name = models.CharField(max_length=100, unique=True)
def __str__(self):
return self.name
class ProjectHostingPlatform(models.Model):
hosting_platform = models.ForeignKey(HostingPlatform, on_delete=models.CASCADE)
project = models.OneToOneField(Project, on_delete=models.CASCADE)
url = models.URLField(unique=True)
def __str__(self):
return self.url
class Star(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
project = models.ForeignKey(Project, on_delete=models.CASCADE)

View File

@ -1,30 +0,0 @@
from django.db import models
class OperatingSystem(models.Model):
name = models.CharField(max_length=100, unique=True)
description = models.TextField(blank=True, default="")
def __str__(self):
return self.name
class OperatingSystemVersion(models.Model):
operating_system = models.ForeignKey(OperatingSystem, on_delete=models.CASCADE)
version = models.CharField(max_length=50, blank=True, default="")
codename = models.CharField(max_length=100, blank=True, default="")
is_lts = models.BooleanField(blank=True, default=False)
def __str__(self):
return f"{self.operating_system.name} {self.version} {'LTS' if self.is_lts else ''}"
class Meta:
constraints = (
models.UniqueConstraint(
fields=(
"operating_system",
"version",
),
name="unique_os_version",
),
)

View File

@ -1,23 +0,0 @@
from django import forms
from .models import ProgrammingLanguage, ProjectProgrammingLanguage
class ProgrammingLanguageForm(forms.ModelForm):
class Meta:
model = ProjectProgrammingLanguage
fields = (
"programming_language",
"percentage",
)
widgets = {
"programming_language": forms.Select(
choices=ProgrammingLanguage.objects.all(),
),
"percentage": forms.NumberInput(
attrs={
"min": "0",
"max": "100",
}
),
}

View File

@ -1,17 +0,0 @@
from django.db import models
class ProgrammingLanguage(models.Model):
name = models.CharField(max_length=100, unique=True)
def __str__(self):
return self.name
class ProjectProgrammingLanguage(models.Model):
project = models.ForeignKey("Project", on_delete=models.CASCADE)
programming_language = models.ForeignKey(ProgrammingLanguage, on_delete=models.CASCADE)
percentage = models.PositiveIntegerField(blank=True, null=True)
def __str__(self):
return f"{self.project.owner}/{self.project.name} | {self.programming_language} | {self.percentage}%"

View File

@ -1,7 +0,0 @@
from django.conf import settings
from django.db import models
class Star(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
project = models.ForeignKey("Project", on_delete=models.CASCADE, related_name="stars")

View File

@ -1,10 +0,0 @@
from django.db import models
class Tag(models.Model):
name = models.CharField(max_length=100, unique=True, db_index=True)
description = models.TextField(blank=True, default="")
icon = models.ImageField(upload_to="types/icons/", null=True, blank=True)
def __str__(self):
return self.name

View File

@ -3,7 +3,7 @@ from django.urls import path
from . import views
urlpatterns = [
path("", views.ProjectListView.as_view(), name="index"),
path("explore/", views.ProjectListView.as_view(), name="explore"),
path("add/", views.ProjectCreateView.as_view(), name="add-project"),
path("<str:owner>/<str:project_name>/", views.ProjectDetailView.as_view(), name="project-detail"),
path("<str:owner>/<str:project_name>/edit/", views.ProjectUpdateView.as_view(), name="project-update"),

View File

@ -7,11 +7,8 @@ from django_filters.views import FilterView
from .filters import ProjectFilter
from .forms import ProjectForm
from .hosting_platform.forms import HostingPlatformForm
from .models import Project
from .programming_language.forms import ProgrammingLanguageForm
from .programming_language.models import ProjectProgrammingLanguage
from .forms import HostingPlatformForm, ProgrammingLanguageForm, ProjectForm
from .models import Project, ProjectProgrammingLanguage
ProgrammingLanguageInlineFormset = inlineformset_factory(
Project,
@ -23,7 +20,7 @@ ProgrammingLanguageInlineFormset = inlineformset_factory(
class ProjectListView(FilterView):
model = Project
template_name = "fossdb/index.html"
template_name = "fossdb/explore.html"
filterset_class = ProjectFilter
context_object_name = "projects"
paginate_by = 10 # optional 10 projects a page