feat: add people to projects and articles

This commit is contained in:
mohamad
2026-10-28 22:10:43 +08:00
parent 473637f477
commit 7c186b4230
14 changed files with 288 additions and 18 deletions
@@ -0,0 +1,77 @@
# Generated by Django 5.2.16 on 2026-10-28 14:09
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('products', '0024_articlecitation_read_more_text_and_more'),
]
operations = [
migrations.CreateModel(
name='ArticlePerson',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('role', models.CharField(default='Collaborator', help_text='Type Organizer, Collaborator, or any other role name.', max_length=100, verbose_name='Role / group')),
('name', models.CharField(max_length=200)),
('description', models.TextField(blank=True)),
('read_more_description', models.BooleanField(default=False, help_text="Collapse this person's description with Read more when it is long.")),
('image', models.ImageField(blank=True, null=True, upload_to='products/people/')),
('image_alt', models.CharField(blank=True, max_length=240)),
('url', models.URLField(blank=True)),
('order', models.PositiveIntegerField(default=0, help_text='Smaller numbers appear first. Organizers appear before collaborators, then custom roles.', verbose_name='Display order')),
('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='people', to='products.article')),
],
options={
'verbose_name': 'Project article person',
'verbose_name_plural': 'Project article people',
'ordering': [models.Case(models.When(role__iexact='organizer', then=models.Value(0)), models.When(role__iexact='collaborator', then=models.Value(1)), default=models.Value(2), output_field=models.IntegerField()), 'order', 'pk'],
'abstract': False,
},
),
migrations.CreateModel(
name='MainProductPerson',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('role', models.CharField(default='Collaborator', help_text='Type Organizer, Collaborator, or any other role name.', max_length=100, verbose_name='Role / group')),
('name', models.CharField(max_length=200)),
('description', models.TextField(blank=True)),
('read_more_description', models.BooleanField(default=False, help_text="Collapse this person's description with Read more when it is long.")),
('image', models.ImageField(blank=True, null=True, upload_to='products/people/')),
('image_alt', models.CharField(blank=True, max_length=240)),
('url', models.URLField(blank=True)),
('order', models.PositiveIntegerField(default=0, help_text='Smaller numbers appear first. Organizers appear before collaborators, then custom roles.', verbose_name='Display order')),
('main_product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='people', to='products.mainproduct')),
],
options={
'verbose_name': 'Main project person',
'verbose_name_plural': 'Main project people',
'ordering': [models.Case(models.When(role__iexact='organizer', then=models.Value(0)), models.When(role__iexact='collaborator', then=models.Value(1)), default=models.Value(2), output_field=models.IntegerField()), 'order', 'pk'],
'abstract': False,
},
),
migrations.CreateModel(
name='SubProductPerson',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('role', models.CharField(default='Collaborator', help_text='Type Organizer, Collaborator, or any other role name.', max_length=100, verbose_name='Role / group')),
('name', models.CharField(max_length=200)),
('description', models.TextField(blank=True)),
('read_more_description', models.BooleanField(default=False, help_text="Collapse this person's description with Read more when it is long.")),
('image', models.ImageField(blank=True, null=True, upload_to='products/people/')),
('image_alt', models.CharField(blank=True, max_length=240)),
('url', models.URLField(blank=True)),
('order', models.PositiveIntegerField(default=0, help_text='Smaller numbers appear first. Organizers appear before collaborators, then custom roles.', verbose_name='Display order')),
('sub_product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='people', to='products.subproduct')),
],
options={
'verbose_name': 'Sub-project person',
'verbose_name_plural': 'Sub-project people',
'ordering': [models.Case(models.When(role__iexact='organizer', then=models.Value(0)), models.When(role__iexact='collaborator', then=models.Value(1)), default=models.Value(2), output_field=models.IntegerField()), 'order', 'pk'],
'abstract': False,
},
),
]