mirror of
https://github.com/Southampton-RSG/breccia-mapper.git
synced 2026-03-03 11:27:09 +00:00
@@ -21,6 +21,11 @@ class RoleAdmin(admin.ModelAdmin):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@admin.register(models.Theme)
|
||||||
|
class ThemeAdmin(admin.ModelAdmin):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
@admin.register(models.Person)
|
@admin.register(models.Person)
|
||||||
class PersonAdmin(admin.ModelAdmin):
|
class PersonAdmin(admin.ModelAdmin):
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ Forms for creating / updating models belonging to the 'people' app.
|
|||||||
"""
|
"""
|
||||||
from django import forms
|
from django import forms
|
||||||
|
|
||||||
from django_select2.forms import Select2Widget
|
from django_select2.forms import Select2Widget, Select2MultipleWidget
|
||||||
|
|
||||||
from . import models
|
from . import models
|
||||||
|
|
||||||
@@ -21,6 +21,7 @@ class PersonForm(forms.ModelForm):
|
|||||||
widgets = {
|
widgets = {
|
||||||
'nationality': Select2Widget(),
|
'nationality': Select2Widget(),
|
||||||
'country_of_residence': Select2Widget(),
|
'country_of_residence': Select2Widget(),
|
||||||
|
'themes': Select2MultipleWidget(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
39
people/migrations/0014_person_role_themes.py
Normal file
39
people/migrations/0014_person_role_themes.py
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
# Generated by Django 2.2.10 on 2020-02-25 11:12
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('people', '0013_person_role'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Discipline',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('name', models.CharField(max_length=255)),
|
||||||
|
('code', models.CharField(blank=True, max_length=15)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Theme',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('name', models.CharField(max_length=255)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='person',
|
||||||
|
name='discipline',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='people', to='people.Discipline'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='person',
|
||||||
|
name='themes',
|
||||||
|
field=models.ManyToManyField(blank=True, related_name='people', to='people.Theme'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -39,6 +39,32 @@ class Role(models.Model):
|
|||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
|
class Discipline(models.Model):
|
||||||
|
"""
|
||||||
|
Discipline within which a :class:`Person` works.
|
||||||
|
"""
|
||||||
|
name = models.CharField(max_length=255,
|
||||||
|
blank=False, null=False)
|
||||||
|
|
||||||
|
#: Short code using system such as JACS 3
|
||||||
|
code = models.CharField(max_length=15,
|
||||||
|
blank=True, null=False)
|
||||||
|
|
||||||
|
def __str__(self) -> str:
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
|
class Theme(models.Model):
|
||||||
|
"""
|
||||||
|
Project theme within which a :class:`Person` works.
|
||||||
|
"""
|
||||||
|
name = models.CharField(max_length=255,
|
||||||
|
blank=False, null=False)
|
||||||
|
|
||||||
|
def __str__(self) -> str:
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
class Person(models.Model):
|
class Person(models.Model):
|
||||||
"""
|
"""
|
||||||
A person may be a member of the BRECcIA core team or an external stakeholder.
|
A person may be a member of the BRECcIA core team or an external stakeholder.
|
||||||
@@ -99,19 +125,33 @@ class Person(models.Model):
|
|||||||
|
|
||||||
country_of_residence = CountryField(blank=True, null=True)
|
country_of_residence = CountryField(blank=True, null=True)
|
||||||
|
|
||||||
|
#: Organisation this person is employed by or affiliated with
|
||||||
organisation = models.ForeignKey(Organisation,
|
organisation = models.ForeignKey(Organisation,
|
||||||
on_delete=models.PROTECT,
|
on_delete=models.PROTECT,
|
||||||
related_name='members',
|
related_name='members',
|
||||||
blank=True, null=True)
|
blank=True, null=True)
|
||||||
|
|
||||||
|
#: Job title this person holds within their organisation
|
||||||
job_title = models.CharField(max_length=255,
|
job_title = models.CharField(max_length=255,
|
||||||
blank=True, null=False)
|
blank=True, null=False)
|
||||||
|
|
||||||
|
#: Discipline within which this person works
|
||||||
|
discipline = models.ForeignKey(Discipline,
|
||||||
|
on_delete=models.PROTECT,
|
||||||
|
related_name='people',
|
||||||
|
blank=True, null=True)
|
||||||
|
|
||||||
|
#: Role this person holds within the project
|
||||||
role = models.ForeignKey(Role,
|
role = models.ForeignKey(Role,
|
||||||
on_delete=models.PROTECT,
|
on_delete=models.PROTECT,
|
||||||
related_name='holders',
|
related_name='holders',
|
||||||
blank=True, null=True)
|
blank=True, null=True)
|
||||||
|
|
||||||
|
#: Project themes within this person works
|
||||||
|
themes = models.ManyToManyField(Theme,
|
||||||
|
related_name='people',
|
||||||
|
blank=True)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def relationships(self):
|
def relationships(self):
|
||||||
return self.relationships_as_source.all().union(
|
return self.relationships_as_source.all().union(
|
||||||
|
|||||||
@@ -47,6 +47,20 @@
|
|||||||
<dt>Role</dt>
|
<dt>Role</dt>
|
||||||
<dd>{{ person.role }}</dd>
|
<dd>{{ person.role }}</dd>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if person.dispipline %}
|
||||||
|
<dt>Discipline</dt>
|
||||||
|
<dd>{{ person.discipline }}</dd>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if person.themes.exists %}
|
||||||
|
<dt>Project Themes</dt>
|
||||||
|
<dd>
|
||||||
|
{% for theme in person.themes.all %}
|
||||||
|
{{ theme }}{% if not forloop.last %}, {% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</dd>
|
||||||
|
{% endif %}
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
<a class="btn btn-success"
|
<a class="btn btn-success"
|
||||||
|
|||||||
Reference in New Issue
Block a user