Finish up collections admin
This commit is contained in:
		
							parent
							
								
									60601beacb
								
							
						
					
					
						commit
						2c8681217b
					
				
					 7 changed files with 361 additions and 68 deletions
				
			
		| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
default_app_config = 'ccdb.collections_ccdb.apps.CollectionsAppConfig'
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,60 @@
 | 
			
		|||
from django.contrib import admin
 | 
			
		||||
 | 
			
		||||
# Register your models here.
 | 
			
		||||
from .models import CollectionType, CollectionMethod, Flaw, ADFGPermit, \
 | 
			
		||||
    DatasheetAttachment, CollectionTrap
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CollectionTypeAdmin(admin.ModelAdmin):
 | 
			
		||||
    list_display = ('name', 'code', 'sort_order')
 | 
			
		||||
    list_display_links = ('name',)
 | 
			
		||||
    search_fields = ('name', 'code')
 | 
			
		||||
    list_per_page = 25
 | 
			
		||||
    fields = ('name', 'code', 'sort_order')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CollectionMethodAdmin(admin.ModelAdmin):
 | 
			
		||||
    list_display = ('name', 'code', 'collection_method_class', 'sort_order')
 | 
			
		||||
    list_display_links = ('name',)
 | 
			
		||||
    search_fields = ('name', 'code', 'collection_method_class')
 | 
			
		||||
    list_per_page = 25
 | 
			
		||||
    fields = ('name', 'code', 'collection_method_class', 'sort_order')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class FlawAdmin(admin.ModelAdmin):
 | 
			
		||||
    list_display = ('name', 'description', 'sort_order')
 | 
			
		||||
    list_display_links = ('name',)
 | 
			
		||||
    search_fields = ('name', 'description')
 | 
			
		||||
    list_per_page = 25
 | 
			
		||||
    fields = ('name', 'description')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ADFGPermitAdmin(admin.ModelAdmin):
 | 
			
		||||
    list_display = ('name', 'sort_order')
 | 
			
		||||
    list_display_links = ('name',)
 | 
			
		||||
    search_fields = ('name',)
 | 
			
		||||
    list_per_page = 25
 | 
			
		||||
    fields = ('name', 'sort_order')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DatasheetAttachmentAdmin(admin.ModelAdmin):
 | 
			
		||||
    list_display = ('collection', 'datasheet')
 | 
			
		||||
    list_display_links = ('datasheet',)
 | 
			
		||||
    list_per_page = 25
 | 
			
		||||
    fields = ('collection', 'datasheet')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CollectionTrapAdmin(admin.ModelAdmin):
 | 
			
		||||
    list_display = ('collection', 'number_of_traps', 'date_opened',
 | 
			
		||||
        'time_opened', 'date_closed', 'time_closed')
 | 
			
		||||
    list_display_links = ('number_of_traps',)
 | 
			
		||||
    list_per_page = 25
 | 
			
		||||
    fields = ('collection', 'number_of_traps', 'date_opened',
 | 
			
		||||
        'time_opened', 'date_closed', 'time_closed')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
admin.site.register(CollectionType, CollectionTypeAdmin)
 | 
			
		||||
admin.site.register(CollectionMethod, CollectionMethodAdmin)
 | 
			
		||||
admin.site.register(Flaw, FlawAdmin)
 | 
			
		||||
admin.site.register(ADFGPermit, ADFGPermitAdmin)
 | 
			
		||||
admin.site.register(DatasheetAttachment, DatasheetAttachmentAdmin)
 | 
			
		||||
admin.site.register(CollectionTrap, CollectionTrapAdmin)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										7
									
								
								ccdb/collections_ccdb/apps.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								ccdb/collections_ccdb/apps.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
from django.apps import AppConfig
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# This is needed because 'collections' is part of the Python Std Lib
 | 
			
		||||
class CollectionsAppConfig(AppConfig):
 | 
			
		||||
    name = 'ccdb.collections_ccdb'
 | 
			
		||||
    verbose_name = 'Collections'
 | 
			
		||||
							
								
								
									
										158
									
								
								ccdb/collections_ccdb/migrations/0001_initial.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										158
									
								
								ccdb/collections_ccdb/migrations/0001_initial.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,158 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
 | 
			
		||||
from django.db import migrations, models
 | 
			
		||||
import autoslug.fields
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('locations', '0002_remove_site_fk_dupes'),
 | 
			
		||||
        ('projects', '0004_initial_grantreport'),
 | 
			
		||||
        ('processing', '0001_initial'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='ADFGPermit',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)),
 | 
			
		||||
                ('name', models.CharField(max_length=200)),
 | 
			
		||||
                ('sort_order', models.IntegerField(null=True, blank=True)),
 | 
			
		||||
                ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name')),
 | 
			
		||||
            ],
 | 
			
		||||
            options={
 | 
			
		||||
                'ordering': ['sort_order'],
 | 
			
		||||
            },
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='Collection',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)),
 | 
			
		||||
                ('number_of_traps', models.IntegerField(null=True, blank=True)),
 | 
			
		||||
                ('collection_start_date', models.DateField(null=True, blank=True)),
 | 
			
		||||
                ('collection_start_time', models.TimeField(null=True, blank=True)),
 | 
			
		||||
                ('collection_end_date', models.DateField(null=True, blank=True)),
 | 
			
		||||
                ('collection_end_time', models.TimeField(null=True, blank=True)),
 | 
			
		||||
                ('specimen_state', models.CharField(max_length=50, blank=True)),
 | 
			
		||||
                ('adfg_permit', models.ForeignKey(to='collections_ccdb.ADFGPermit', blank=True, null=True)),
 | 
			
		||||
            ],
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='CollectionMethod',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)),
 | 
			
		||||
                ('name', models.CharField(max_length=100)),
 | 
			
		||||
                ('code', models.CharField(max_length=10, blank=True)),
 | 
			
		||||
                ('collection_method_class', models.CharField(max_length=50, blank=True)),
 | 
			
		||||
                ('sort_order', models.IntegerField(null=True, blank=True)),
 | 
			
		||||
                ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name')),
 | 
			
		||||
            ],
 | 
			
		||||
            options={
 | 
			
		||||
                'ordering': ['sort_order'],
 | 
			
		||||
            },
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='CollectionTrap',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)),
 | 
			
		||||
                ('number_of_traps', models.IntegerField()),
 | 
			
		||||
                ('date_opened', models.DateField()),
 | 
			
		||||
                ('time_opened', models.TimeField()),
 | 
			
		||||
                ('date_closed', models.DateField()),
 | 
			
		||||
                ('time_closed', models.TimeField()),
 | 
			
		||||
                ('collection', models.ForeignKey(to='collections_ccdb.Collection')),
 | 
			
		||||
            ],
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='CollectionType',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)),
 | 
			
		||||
                ('name', models.CharField(max_length=100)),
 | 
			
		||||
                ('code', models.CharField(max_length=10, blank=True)),
 | 
			
		||||
                ('sort_order', models.IntegerField(null=True, blank=True)),
 | 
			
		||||
                ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name')),
 | 
			
		||||
            ],
 | 
			
		||||
            options={
 | 
			
		||||
                'ordering': ['sort_order'],
 | 
			
		||||
            },
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='DatasheetAttachment',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)),
 | 
			
		||||
                ('datasheet', models.FileField(verbose_name='Datasheet', upload_to='collections/datasheets/%Y/%m/%d')),
 | 
			
		||||
                ('collection', models.ForeignKey(to='collections_ccdb.Collection')),
 | 
			
		||||
            ],
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.CreateModel(
 | 
			
		||||
            name='Flaw',
 | 
			
		||||
            fields=[
 | 
			
		||||
                ('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)),
 | 
			
		||||
                ('name', models.CharField(max_length=200)),
 | 
			
		||||
                ('description', models.CharField(max_length=255, blank=True)),
 | 
			
		||||
                ('sort_order', models.IntegerField(null=True, blank=True)),
 | 
			
		||||
                ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name')),
 | 
			
		||||
            ],
 | 
			
		||||
            options={
 | 
			
		||||
                'ordering': ['sort_order'],
 | 
			
		||||
            },
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AlterUniqueTogether(
 | 
			
		||||
            name='collectiontype',
 | 
			
		||||
            unique_together=set([('name', 'code')]),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AlterUniqueTogether(
 | 
			
		||||
            name='collectionmethod',
 | 
			
		||||
            unique_together=set([('name', 'code')]),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='collection',
 | 
			
		||||
            name='collection_method',
 | 
			
		||||
            field=models.ForeignKey(to='collections_ccdb.CollectionMethod'),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='collection',
 | 
			
		||||
            name='collection_type',
 | 
			
		||||
            field=models.ForeignKey(to='collections_ccdb.CollectionType'),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='collection',
 | 
			
		||||
            name='flaw',
 | 
			
		||||
            field=models.ForeignKey(to='collections_ccdb.Flaw', blank=True, null=True),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='collection',
 | 
			
		||||
            name='process_type',
 | 
			
		||||
            field=models.ForeignKey(to='processing.ProcessType', blank=True, null=True),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='collection',
 | 
			
		||||
            name='project',
 | 
			
		||||
            field=models.ForeignKey(to='projects.Project'),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='collection',
 | 
			
		||||
            name='reagent',
 | 
			
		||||
            field=models.ForeignKey(to='processing.Reagent', blank=True, null=True),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='collection',
 | 
			
		||||
            name='storage_location',
 | 
			
		||||
            field=models.ForeignKey(to='locations.StorageLocation', blank=True, null=True),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='collection',
 | 
			
		||||
            name='study_location',
 | 
			
		||||
            field=models.ForeignKey(to='locations.StudyLocation'),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AlterUniqueTogether(
 | 
			
		||||
            name='collectiontrap',
 | 
			
		||||
            unique_together=set([('collection', 'date_opened', 'time_opened', 'date_closed', 'time_closed')]),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AlterUniqueTogether(
 | 
			
		||||
            name='collection',
 | 
			
		||||
            unique_together=set([('project', 'study_location', 'collection_type', 'collection_start_date', 'collection_end_date', 'collection_method')]),
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
| 
						 | 
				
			
			@ -3,27 +3,103 @@ from django.db import models
 | 
			
		|||
from autoslug import AutoSlugField
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# class Collection(models.Model):
 | 
			
		||||
#     project = models.ForeignKey('projects.Project')
 | 
			
		||||
#     study_location = models.ForeignKey('locations.StudyLocation')
 | 
			
		||||
#     collection_type = models.ForeignKey(CollectionType)
 | 
			
		||||
#     collection_method = models.ForeignKey(CollectionMethod)
 | 
			
		||||
#     number_of_traps = models.IntegerField(blank=True, null=True)
 | 
			
		||||
#     collection_start_date = models.DateField(blank=True, null=True)
 | 
			
		||||
#     collection_start_time = models.TimeField(blank=True, null=True)
 | 
			
		||||
#     collection_end_date = models.DateField(blank=True, null=True)
 | 
			
		||||
#     collection_end_time = models.TimeField(blank=True, null=True)
 | 
			
		||||
#     storage_location = models.ForeignKey('locations.StorageLocation', blank=True, null=True)
 | 
			
		||||
#     specimen_state = models.CharField(max_length=50, blank=True)
 | 
			
		||||
#     process_type = models.ForeignKey('processing.ProcessType', blank=True, null=True)
 | 
			
		||||
#     reagent = models.ForeignKey('processing.Reagent', blank=True, null=True)
 | 
			
		||||
#     # adfg_permit = models.CharField(db_column='ADFG_Permit', max_length=25, blank=True, null=True)  # Field name made lowercase.
 | 
			
		||||
#     # link_to_datasheets = models.CharField(db_column='Link_To_Datasheets', max_length=255, blank=True, null=True)  # Field name made lowercase.
 | 
			
		||||
#     flaw = models.ForeignKey(Flaw, blank=True, null=True)
 | 
			
		||||
#
 | 
			
		||||
#     def __str__(self):
 | 
			
		||||
#         return "{project} {study_location} {collection_type} {collection_method}".format(**self)
 | 
			
		||||
#
 | 
			
		||||
#     class Meta:
 | 
			
		||||
#         unique_together = ('project', 'study_location', 'collection_type',
 | 
			
		||||
#             'collection_start_date', 'collection_end_date', 'collection_method')
 | 
			
		||||
class CollectionType(models.Model):
 | 
			
		||||
    name = models.CharField(max_length=100)
 | 
			
		||||
    code = models.CharField(max_length=10, blank=True)
 | 
			
		||||
    sort_order = models.IntegerField(blank=True, null=True)
 | 
			
		||||
    slug = AutoSlugField(populate_from='name')
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return self.name
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        unique_together = ('name', 'code')
 | 
			
		||||
        ordering = ['sort_order']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CollectionMethod(models.Model):
 | 
			
		||||
    name = models.CharField(max_length=100)
 | 
			
		||||
    code = models.CharField(max_length=10, blank=True)
 | 
			
		||||
    collection_method_class = models.CharField(max_length=50, blank=True)
 | 
			
		||||
    sort_order = models.IntegerField(blank=True, null=True)
 | 
			
		||||
    slug = AutoSlugField(populate_from='name')
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return self.name
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        unique_together = ('name', 'code')
 | 
			
		||||
        ordering = ['sort_order']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Flaw(models.Model):
 | 
			
		||||
    name = models.CharField(max_length=200)
 | 
			
		||||
    description = models.CharField(max_length=255, blank=True)
 | 
			
		||||
    sort_order = models.IntegerField(blank=True, null=True)
 | 
			
		||||
    slug = AutoSlugField(populate_from='name')
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return self.name
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        ordering = ['sort_order']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ADFGPermit(models.Model):
 | 
			
		||||
    name = models.CharField(max_length=200)
 | 
			
		||||
    sort_order = models.IntegerField(blank=True, null=True)
 | 
			
		||||
    slug = AutoSlugField(populate_from='name')
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return self.name
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        ordering = ['sort_order']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Collection(models.Model):
 | 
			
		||||
    project = models.ForeignKey('projects.Project')
 | 
			
		||||
    study_location = models.ForeignKey('locations.StudyLocation')
 | 
			
		||||
    collection_type = models.ForeignKey(CollectionType)
 | 
			
		||||
    collection_method = models.ForeignKey(CollectionMethod)
 | 
			
		||||
    number_of_traps = models.IntegerField(blank=True, null=True)
 | 
			
		||||
    collection_start_date = models.DateField(blank=True, null=True)
 | 
			
		||||
    collection_start_time = models.TimeField(blank=True, null=True)
 | 
			
		||||
    collection_end_date = models.DateField(blank=True, null=True)
 | 
			
		||||
    collection_end_time = models.TimeField(blank=True, null=True)
 | 
			
		||||
    storage_location = models.ForeignKey('locations.StorageLocation', blank=True, null=True)
 | 
			
		||||
    specimen_state = models.CharField(max_length=50, blank=True)
 | 
			
		||||
    process_type = models.ForeignKey('processing.ProcessType', blank=True, null=True)
 | 
			
		||||
    reagent = models.ForeignKey('processing.Reagent', blank=True, null=True)
 | 
			
		||||
    adfg_permit = models.ForeignKey(ADFGPermit, blank=True, null=True)
 | 
			
		||||
    flaw = models.ForeignKey(Flaw, blank=True, null=True)
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return "{} {} {} {} {} {}".format(self.project, self.study_location,
 | 
			
		||||
            self.collection_start_date, self.collection_end_date,
 | 
			
		||||
            self.collection_type, self.collection_method)
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        unique_together = ('project', 'study_location', 'collection_type',
 | 
			
		||||
            'collection_start_date', 'collection_end_date', 'collection_method')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DatasheetAttachment(models.Model):
 | 
			
		||||
    collection = models.ForeignKey(Collection)
 | 
			
		||||
    datasheet = models.FileField("Datasheet",
 | 
			
		||||
        upload_to='collections/datasheets/%Y/%m/%d')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CollectionTrap(models.Model):
 | 
			
		||||
    collection = models.ForeignKey(Collection)
 | 
			
		||||
    number_of_traps = models.IntegerField()
 | 
			
		||||
    date_opened = models.DateField()
 | 
			
		||||
    time_opened = models.TimeField()
 | 
			
		||||
    date_closed = models.DateField()
 | 
			
		||||
    time_closed = models.TimeField()
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return "{collection} {number_of_traps} {date_opened} {date_closed}".format(self)
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        unique_together = ('collection', 'date_opened', 'time_opened', 'date_closed', 'time_closed')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue