mirror of
https://github.com/kristoferssolo/FOSSDB.git
synced 2025-10-21 17:50:35 +00:00
Fix DetailView
Shows all fields of `Project` in `DetailView`
This commit is contained in:
parent
a1dbb90474
commit
3cfe95d214
@ -1,7 +1,5 @@
|
||||
from django.db import models
|
||||
|
||||
from fossdb.models import Project
|
||||
|
||||
|
||||
class HostingPlatform(models.Model):
|
||||
name = models.CharField(max_length=100, unique=True)
|
||||
@ -12,7 +10,7 @@ class HostingPlatform(models.Model):
|
||||
|
||||
class ProjectHostingPlatform(models.Model):
|
||||
hosting_platform = models.ForeignKey(HostingPlatform, on_delete=models.CASCADE)
|
||||
project = models.OneToOneField(Project, on_delete=models.CASCADE)
|
||||
project = models.OneToOneField("Project", on_delete=models.CASCADE)
|
||||
url = models.URLField(unique=True)
|
||||
|
||||
def __str__(self):
|
||||
|
||||
104
FOSSDB/apps/fossdb/migrations/0001_initial.py
Normal file
104
FOSSDB/apps/fossdb/migrations/0001_initial.py
Normal file
@ -0,0 +1,104 @@
|
||||
# Generated by Django 4.2.2 on 2023-06-26 17:16
|
||||
|
||||
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')),
|
||||
('name', models.CharField(max_length=100, unique=True)),
|
||||
],
|
||||
),
|
||||
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, unique=True)),
|
||||
('full_name', models.CharField(max_length=100, unique=True)),
|
||||
('url', models.URLField(blank=True, default='')),
|
||||
('text', models.TextField(blank=True, default='')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='OperatingSystem',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=100, unique=True)),
|
||||
('description', models.TextField(blank=True, default='')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='OperatingSystemVersion',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('version', models.CharField(blank=True, default='', max_length=50)),
|
||||
('codename', models.CharField(blank=True, default='', max_length=100)),
|
||||
('is_lts', models.BooleanField(blank=True, default=False)),
|
||||
('operating_system', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.operatingsystem')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ProgrammingLanguage',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=100, unique=True)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Project',
|
||||
fields=[
|
||||
('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=255)),
|
||||
('description', models.TextField(blank=True, default='')),
|
||||
('date_created', models.DateTimeField(auto_now_add=True)),
|
||||
('license', models.ManyToManyField(blank=True, to='fossdb.license')),
|
||||
('operating_system', models.ManyToManyField(blank=True, to='fossdb.operatingsystemversion')),
|
||||
('owner', 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(db_index=True, max_length=100, unique=True)),
|
||||
('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()),
|
||||
('programming_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(unique=True)),
|
||||
('hosting_platform', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fossdb.hostingplatform')),
|
||||
('project', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='fossdb.project')),
|
||||
],
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='project',
|
||||
name='tag',
|
||||
field=models.ManyToManyField(blank=True, to='fossdb.tag'),
|
||||
),
|
||||
]
|
||||
@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.2 on 2023-06-26 17:38
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fossdb', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='project',
|
||||
name='proggramming_language',
|
||||
field=models.ManyToManyField(blank=True, through='fossdb.ProjectProgrammingLanguage', to='fossdb.programminglanguage'),
|
||||
),
|
||||
]
|
||||
@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.2 on 2023-06-26 17:43
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fossdb', '0002_project_proggramming_language'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='project',
|
||||
old_name='proggramming_language',
|
||||
new_name='programming_language',
|
||||
),
|
||||
]
|
||||
@ -0,0 +1,17 @@
|
||||
# Generated by Django 4.2.2 on 2023-06-26 17:45
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fossdb', '0003_rename_proggramming_language_project_programming_language'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='project',
|
||||
name='programming_language',
|
||||
),
|
||||
]
|
||||
@ -1,5 +1,4 @@
|
||||
from django.db import models
|
||||
from fossdb.models import Project
|
||||
|
||||
|
||||
class ProgrammingLanguage(models.Model):
|
||||
@ -10,9 +9,9 @@ class ProgrammingLanguage(models.Model):
|
||||
|
||||
|
||||
class ProjectProgrammingLanguage(models.Model):
|
||||
project = models.ForeignKey(Project, on_delete=models.CASCADE)
|
||||
project = models.ForeignKey("Project", on_delete=models.CASCADE)
|
||||
programming_language = models.ForeignKey(ProgrammingLanguage, on_delete=models.CASCADE)
|
||||
percentage = models.PositiveIntegerField()
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.project} | {self.programming_language} | {self.percentage}%"
|
||||
return f"{self.project.owner}/{self.project.name} | {self.programming_language} | {self.percentage}%"
|
||||
|
||||
@ -1,12 +1,15 @@
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
|
||||
from django.db import transaction
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.urls import reverse_lazy
|
||||
from django.views.generic import CreateView, DeleteView, DetailView, UpdateView
|
||||
|
||||
from .forms import ProjectForm
|
||||
from .hosting_platform.forms import HostingPlatformForm
|
||||
from .hosting_platform.models import ProjectHostingPlatform
|
||||
from .models import Project
|
||||
from .programming_language.forms import ProgrammingLanguageForm
|
||||
from .programming_language.models import ProjectProgrammingLanguage
|
||||
|
||||
|
||||
def index(request):
|
||||
@ -25,21 +28,23 @@ class ProjectCreateView(LoginRequiredMixin, CreateView):
|
||||
redirect_field_name = "redirect_to"
|
||||
|
||||
def form_valid(self, form):
|
||||
form.instance.owner = self.request.user
|
||||
response = super().form_valid(form)
|
||||
response = None
|
||||
with transaction.atomic():
|
||||
form.instance.owner = self.request.user
|
||||
response = super().form_valid(form)
|
||||
|
||||
hosting_platform_form = HostingPlatformForm(self.request.POST, instance=self.object)
|
||||
if hosting_platform_form.is_valid():
|
||||
hosting_platform = hosting_platform_form.save(commit=False)
|
||||
hosting_platform.project = self.object
|
||||
hosting_platform.save()
|
||||
hosting_platform_form = HostingPlatformForm(self.request.POST, instance=self.object)
|
||||
if hosting_platform_form.is_valid():
|
||||
hosting_platform = hosting_platform_form.save(commit=False)
|
||||
hosting_platform.project = self.object
|
||||
hosting_platform.save()
|
||||
|
||||
# TODO: allow adding multiple languages
|
||||
programming_language_form = ProgrammingLanguageForm(self.request.POST, instance=self.object)
|
||||
if programming_language_form.is_valid():
|
||||
programming_language = programming_language_form.save(commit=False)
|
||||
programming_language.project = self.object
|
||||
programming_language.save()
|
||||
# TODO: allow adding multiple languages
|
||||
programming_language_form = ProgrammingLanguageForm(self.request.POST, instance=self.object)
|
||||
if programming_language_form.is_valid():
|
||||
programming_language = programming_language_form.save(commit=False)
|
||||
programming_language.project = self.object
|
||||
programming_language.save()
|
||||
|
||||
return response
|
||||
|
||||
@ -73,25 +78,6 @@ class ProjectUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
|
||||
login_url = "/login/"
|
||||
redirect_field_name = "redirect_to"
|
||||
|
||||
def form_valid(self, form):
|
||||
form.instance.owner = self.request.user
|
||||
response = super().form_valid(form)
|
||||
|
||||
hosting_platform_form = HostingPlatformForm(self.request.POST, instance=self.object)
|
||||
if hosting_platform_form.is_valid():
|
||||
hosting_platform = hosting_platform_form.save(commit=False)
|
||||
hosting_platform.project = self.object
|
||||
hosting_platform.save()
|
||||
|
||||
# TODO: allow adding multiple languages
|
||||
programming_language_form = ProgrammingLanguageForm(self.request.POST, instance=self.object)
|
||||
if programming_language_form.is_valid():
|
||||
programming_language = programming_language_form.save(commit=False)
|
||||
programming_language.project = self.object
|
||||
programming_language.save()
|
||||
|
||||
return response
|
||||
|
||||
def get_queryset(self):
|
||||
queryset = super().get_queryset()
|
||||
return queryset.filter(owner__username=self.kwargs.get("username"))
|
||||
|
||||
@ -1,11 +1,14 @@
|
||||
{% extends "layout.html" %}
|
||||
{% load static %}
|
||||
{% block title %}{{ project.name }}{% endblock %}
|
||||
{% block title %}{{ project.owner }}/{{ project.name }}{% endblock %}
|
||||
{% block meta %}{% endblock %}
|
||||
{% block content %}
|
||||
<h2>@{{ project.owner.username }}</h2>
|
||||
<p>{{ project.name }}</p>
|
||||
<h2>@{{ project.owner }}</h2>
|
||||
<h3>{{ project.name }}</h3>
|
||||
<p>{{ project.description }}</p>
|
||||
<p>
|
||||
<a href="{{ project.projecthostingplatform.url }}" target="_blank">{{ project.projecthostingplatform.hosting_platform }}</a>
|
||||
</p>
|
||||
<ul>
|
||||
{% for license in project.license.all %}
|
||||
<li>
|
||||
@ -16,15 +19,8 @@
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<ul>
|
||||
{% for language in project.programming_language.all %}
|
||||
<li>{{ language }}%</li>
|
||||
{% empty %}
|
||||
<p>No language</p>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<ul>
|
||||
{% for os in project.oprating_system.all %}
|
||||
<li>{{ os.version }}</li>
|
||||
{% for os in project.operating_system.all %}
|
||||
<li>{{ os }}</li>
|
||||
{% empty %}
|
||||
<p>No OS</p>
|
||||
{% endfor %}
|
||||
@ -36,6 +32,13 @@
|
||||
<p>No tag</p>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<ul>
|
||||
{% for language in project.projectprogramminglanguage_set.all %}
|
||||
<li>{{ language.programming_language }} {{ language.percentage }}%</li>
|
||||
{% empty %}
|
||||
<p>No language</p>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<p>{{ project.date_created|date:"d.m.Y, G:i" }}</p>
|
||||
<button>
|
||||
<a href="{% url 'project-update' project.owner project.name %}">Update</a>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user