feat(portfolio): add project tags

This commit is contained in:
2026-09-16 17:31:04 +02:00
parent 6a4e6ba9c5
commit c2e5f9a3a2
4 changed files with 68 additions and 0 deletions
+5
View File
@@ -21,3 +21,8 @@ class CompanyAdmin(admin.ModelAdmin):
@admin.register(models.Project)
class ProjectAdmin(admin.ModelAdmin):
list_display = ["name", "short_description"]
@admin.register(models.ProjectTag)
class ProjectTagAdmin(admin.ModelAdmin):
list_display = ["name", "color"]
@@ -0,0 +1,26 @@
# Generated by Django 6.1.1 on 2026-09-15 18:04
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('portfolio', '0004_company_color_alter_company_logo'),
]
operations = [
migrations.CreateModel(
name='ProjectTag',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=25, verbose_name='Name')),
('color', models.CharField(default='000000', max_length=6, verbose_name='Color (hex)')),
],
),
migrations.AddField(
model_name='project',
name='tags',
field=models.ManyToManyField(blank=True, related_name='projects', to='portfolio.projecttag', verbose_name='Tags'),
),
]
+25
View File
@@ -57,6 +57,22 @@ class JobTask(models.Model):
return self.job.__str__()
class ProjectTag(models.Model):
name = models.CharField(
verbose_name=_("Name"), max_length=25, blank=False, null=False
)
color = models.CharField(
verbose_name=_("Color (hex)"),
max_length=6,
null=False,
blank=False,
default="000000",
)
def __str__(self):
return self.name
class Project(models.Model):
name = models.CharField(
verbose_name=_("Name"), max_length=256, null=False, blank=False
@@ -65,3 +81,12 @@ class Project(models.Model):
verbose_name=_("Short description"), max_length=512, blank=False, null=False
)
url = models.URLField(verbose_name=_("URL"), blank=True, null=False)
tags = models.ManyToManyField(
ProjectTag,
verbose_name=_("Tags"),
blank=True,
related_name="projects",
)
def __str__(self):
return self.name
+12
View File
@@ -12,6 +12,12 @@
<div class="card-body">
<h4>{{ project.name }}</h4>
<p>{{ project.short_description }}</p>
<div>
{% for t in project.tags.all %}
<div class="badge text-white fs-5"
style="background-color: #{{ t.color }}">{{ t }}</div>
{% endfor %}
</div>
</div>
</a>
{% else %}
@@ -19,6 +25,12 @@
<div class="card-body">
<h4>{{ project.name }}</h4>
<p>{{ project.short_description }}</p>
<div>
{% for t in project.tags.all %}
<div class="badge text-white fs-5"
style="background-color: #{{ t.color }}">{{ t }}</div>
{% endfor %}
</div>
</div>
</div>
{% endif %}