Skip to content
Snippets Groups Projects
Commit 7b6e621c authored by James Graham's avatar James Graham
Browse files

Begin support for dynamically adding metadata to data sources

parent 266fec34
No related branches found
No related tags found
1 merge request!60Merge dev pre-hackday
...@@ -3,6 +3,11 @@ from django.contrib import admin ...@@ -3,6 +3,11 @@ from django.contrib import admin
from . import forms, models from . import forms, models
@admin.register(models.MetadataField)
class MetadataFieldAdmin(admin.ModelAdmin):
pass
@admin.register(models.DataSource) @admin.register(models.DataSource)
class DataSourceAdmin(admin.ModelAdmin): class DataSourceAdmin(admin.ModelAdmin):
readonly_fields = ['owner'] readonly_fields = ['owner']
...@@ -36,6 +41,7 @@ class DataSourceAdmin(admin.ModelAdmin): ...@@ -36,6 +41,7 @@ class DataSourceAdmin(admin.ModelAdmin):
""" """
try: try:
owner = form.instance.owner owner = form.instance.owner
except models.DataSource.owner.RelatedObjectDoesNotExist: except models.DataSource.owner.RelatedObjectDoesNotExist:
form.instance.owner = request.user form.instance.owner = request.user
......
# Generated by Django 2.0.8 on 2018-12-07 13:53
import django.core.validators
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('datasources', '0015_add_dynamic_metadata'),
]
operations = [
migrations.AddField(
model_name='metadatafield',
name='short_name',
field=models.CharField(default='', max_length=63, unique=True, validators=[django.core.validators.RegexValidator('^[a-zA-Z][a-zA-Z0-9_]*\\Z', 'Short name must begin with a letter and consist only of letters, numbers and underscores.', 'invalid')]),
preserve_default=False,
),
]
...@@ -4,6 +4,7 @@ import typing ...@@ -4,6 +4,7 @@ import typing
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from django.core import validators
from django.db import models from django.db import models
from django.urls import reverse from django.urls import reverse
import requests import requests
...@@ -25,6 +26,20 @@ class MetadataField(models.Model): ...@@ -25,6 +26,20 @@ class MetadataField(models.Model):
unique=True, unique=True,
blank=False, null=False) blank=False, null=False)
short_name = models.CharField(max_length=MAX_LENGTH_NAME,
validators=[
validators.RegexValidator(
'^[a-zA-Z][a-zA-Z0-9_]*\Z',
'Short name must begin with a letter and consist only of letters, numbers and underscores.',
'invalid'
)
],
unique=True,
blank=False, null=False)
def __str__(self):
return self.name
class MetadataItem(models.Model): class MetadataItem(models.Model):
""" """
...@@ -49,6 +64,9 @@ class MetadataItem(models.Model): ...@@ -49,6 +64,9 @@ class MetadataItem(models.Model):
class Meta: class Meta:
unique_together = (('field', 'datasource'),) unique_together = (('field', 'datasource'),)
def __str__(self):
return self.value
@enum.unique @enum.unique
class UserPermissionLevels(enum.IntEnum): class UserPermissionLevels(enum.IntEnum):
......
...@@ -79,6 +79,30 @@ ...@@ -79,6 +79,30 @@
</tbody> </tbody>
</table> </table>
<table class="table">
<thead>
<th scope="col" class="w-25 border-0">Metadata key</th>
<th scope="col" class="border-0"></th>
</thead>
<tbody>
{% for metadata_item in datasource.metadata_items.all %}
<tr>
<td>{{ metadata_item.field.name }}</td>
<td>{{ metadata_item.value }}</td>
</tr>
{% endfor %}
{% if has_edit_permission %}
<form action="{% url 'datasources:datasource.detail' pk=datasource.pk %}">
<tr>
<td></td>
<td></td>
</tr>
</form>
{% endif %}
</tbody>
</table>
<hr> <hr>
{% if is_catalogue %} {% if is_catalogue %}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment