Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions geodjango/samplelocations/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from django import forms
from django.contrib.gis.admin import GISModelAdmin
from django.contrib.gis.geos import Point
from samplelocations.models import Location, Thing, WellThing, SpringThing, Location_Thing_Junction, Sensor, Datastream, Observation, \
from samplelocations.models import Location, Thing, Location_Thing_Junction, Sensor, Datastream, Observation, \
GroundwaterLevelObservation, Sample

class LocationForm(forms.ModelForm):
Expand All @@ -29,14 +29,6 @@ class LocationAdmin(GISModelAdmin):
class ThingAdmin(ModelAdmin):
pass

@admin.register(WellThing)
class WellThingAdmin(ModelAdmin):
pass

@admin.register(SpringThing)
class SpringThingAdmin(ModelAdmin):
pass

@admin.register(Location_Thing_Junction)
class LocationThingJunctionAdmin(ModelAdmin):
pass
Expand All @@ -61,6 +53,14 @@ class GroundwaterLevelObservationAdmin(ModelAdmin):
class SampleAdmin(ModelAdmin):
pass

# @admin.register(WellThing)
# class WellThingAdmin(ModelAdmin):
# pass

# @admin.register(SpringThing)
# class SpringThingAdmin(ModelAdmin):
# pass

#admin.site.register(Lexicon)
#admin.site.register(WellScreen)
#admin.site.register(Equipment)
Expand Down
162 changes: 86 additions & 76 deletions geodjango/samplelocations/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Generated by Django 5.2.3 on 2025-06-26 15:14
# Generated by Django 5.2.3 on 2025-07-30 18:04

import django.contrib.gis.db.models.fields
import django.db.models.deletion
Expand All @@ -14,114 +14,124 @@ class Migration(migrations.Migration):

operations = [
migrations.CreateModel(
name='Contact',
name='Datastream',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('email', models.EmailField(max_length=254)),
('phone', models.CharField(blank=True, max_length=20, null=True)),
('date_created', models.DateTimeField(auto_now_add=True)),
('datastream_id', models.BigAutoField(primary_key=True, serialize=False)),
('observed_property', models.CharField(max_length=100)),
('release_status', models.BooleanField(default=False)),
],
options={
'verbose_name': 'Contact',
'verbose_name_plural': 'Contacts',
'ordering': ['name'],
},
),
migrations.CreateModel(
name='Lexicon',
name='Observation',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100, unique=True)),
('description', models.CharField(blank=True, max_length=255, null=True)),
('date_created', models.DateTimeField(auto_now_add=True)),
('observation_id', models.BigAutoField(primary_key=True, serialize=False)),
('observed_value', models.FloatField(help_text='The value of the observation')),
('release_status', models.BooleanField(default=False)),
('datastream_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='observations', to='samplelocations.datastream', verbose_name='related datastream')),
],
options={
'verbose_name': 'Lexicon',
'verbose_name_plural': 'Lexicons',
'ordering': ['name'],
},
),
migrations.CreateModel(
name='Owner',
name='Location',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('description', models.CharField(blank=True, max_length=255, null=True)),
('location_id', models.BigAutoField(primary_key=True, serialize=False)),
('coordinate', django.contrib.gis.db.models.fields.PointField(dim=3, srid=4326)),
('date_created', models.DateTimeField(auto_now_add=True)),
('contact', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='owners', to='samplelocations.contact')),
],
options={
'verbose_name': 'Owner',
'verbose_name_plural': 'Owners',
'ordering': ['name'],
'verbose_name': 'Location',
'verbose_name_plural': 'Locations',
'db_table_comment': "This table stores point locations on the earth's surface",
},
),
migrations.CreateModel(
name='SampleLocation',
name='Sample',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('description', models.CharField(blank=True, max_length=255, null=True)),
('visible', models.BooleanField(default=False)),
('point', django.contrib.gis.db.models.fields.PointField(srid=4326)),
('date_created', models.DateTimeField(auto_now_add=True)),
('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='samplelocations', to='samplelocations.owner')),
('sample_id', models.BigAutoField(primary_key=True, serialize=False)),
('sample_matrix', models.CharField(choices=[('GW', 'Groundwater'), ('S', 'Soil')], default='GW', max_length=2, verbose_name='type of sample')),
('sample_date', models.DateTimeField()),
('sample_notes', models.TextField(blank=True, null=True)),
],
options={
'verbose_name': 'Sample Location',
'verbose_name_plural': 'Sample Locations',
'ordering': ['name'],
},
),
migrations.CreateModel(
name='Equipment',
name='Sensor',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('equipment_type', models.CharField(max_length=50)),
('model', models.CharField(max_length=50)),
('serial_no', models.CharField(max_length=50)),
('date_installed', models.DateTimeField(blank=True, null=True)),
('date_removed', models.DateTimeField(blank=True, null=True)),
('recording_interval', models.IntegerField(blank=True, null=True)),
('equipment_notes', models.CharField(blank=True, max_length=50, null=True)),
('location', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='equipment', to='samplelocations.samplelocation')),
('sensor_id', models.BigAutoField(primary_key=True, serialize=False)),
('name', models.CharField(blank=True, max_length=100, null=True)),
('serial_number', models.CharField(blank=True, max_length=50, null=True)),
('install_date', models.DateTimeField(blank=True, null=True)),
('model', models.CharField(blank=True, max_length=50, null=True)),
('notes', models.TextField(blank=True, null=True)),
],
),
migrations.CreateModel(
name='Spring',
name='GroundwaterLevelObservation',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('description', models.CharField(blank=True, max_length=255, null=True)),
('location', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='springs', to='samplelocations.samplelocation')),
('groundwater_level_observation_id', models.BigAutoField(primary_key=True, serialize=False)),
('observation_ptr', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, parent_link=True, related_name='groundwater_level_observations', to='samplelocations.observation', verbose_name='related observation')),
],
bases=('samplelocations.observation',),
),
migrations.CreateModel(
name='Well',
name='Location_Thing_Junction',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('ose_pod_id', models.CharField(blank=True, max_length=50, null=True)),
('api_id', models.CharField(blank=True, default='', max_length=50)),
('usgs_id', models.CharField(blank=True, max_length=50, null=True)),
('well_depth', models.FloatField(blank=True, help_text='feet below ground surface', null=True)),
('hole_depth', models.FloatField(blank=True, help_text='feet below ground surface', null=True)),
('casing_diameter', models.FloatField(blank=True, help_text='inches', null=True)),
('casing_depth', models.FloatField(blank=True, help_text='feet below ground surface', null=True)),
('casing_description', models.CharField(blank=True, max_length=50, null=True)),
('construction_notes', models.CharField(blank=True, max_length=250, null=True)),
('formation_zone', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='wells_by_formation', to='samplelocations.lexicon')),
('location', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='wells', to='samplelocations.samplelocation')),
('well_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='wells_by_type', to='samplelocations.lexicon')),
('effective_start', models.DateTimeField()),
('effective_end', models.DateTimeField()),
('location_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='locations_things', to='samplelocations.location', verbose_name='related location')),
],
options={
'db_table_comment': 'Junction table linking Location and Thing models',
},
),
migrations.AddField(
model_name='observation',
name='sample',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='observations', to='samplelocations.sample', verbose_name='related sample'),
),
migrations.AddField(
model_name='datastream',
name='sensor_id',
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='datastreams', to='samplelocations.sensor', verbose_name='related sensor'),
),
migrations.CreateModel(
name='WellScreen',
name='Thing',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('screen_depth_top', models.FloatField(help_text='feet below ground surface')),
('screen_depth_bottom', models.FloatField(help_text='feet below ground surface')),
('screen_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='well_screens_by_type', to='samplelocations.lexicon')),
('well', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='screens', to='samplelocations.well')),
('thing_id', models.BigAutoField(primary_key=True, serialize=False)),
('name', models.CharField(max_length=100, unique=True)),
('thing_type', models.CharField(choices=[('W', 'Well'), ('S', 'Spring')], default='W', max_length=2, verbose_name='type of thing')),
('release_status', models.BooleanField(default=False)),
('date_created', models.DateTimeField(auto_now_add=True)),
('well_depth_ft', models.FloatField(blank=True, help_text='well depth feet below ground surface', null=True)),
('hole_depth_ft', models.FloatField(blank=True, help_text='hole depth feet below ground surface', null=True)),
('casing_diameter_ft', models.FloatField(blank=True, help_text='casing diameter in ft', null=True)),
('casing_depth_ft', models.FloatField(blank=True, help_text='casing depth feet below ground surface', null=True)),
('casing_description', models.CharField(blank=True, max_length=50, null=True)),
('construction_notes', models.TextField(blank=True, null=True)),
('spring_type', models.CharField(blank=True, max_length=255, null=True)),
('location_id', models.ManyToManyField(related_name='things', through='samplelocations.Location_Thing_Junction', to='samplelocations.location', verbose_name='related location')),
],
options={
'verbose_name': 'Thing',
'verbose_name_plural': 'Things',
},
),
migrations.AddField(
model_name='sample',
name='thing_id',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='samples', to='samplelocations.thing', verbose_name='related thing'),
),
migrations.AddField(
model_name='location_thing_junction',
name='thing_id',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='locations_things', to='samplelocations.thing', verbose_name='related thing'),
),
migrations.AddField(
model_name='datastream',
name='thing_id',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='datastreams', to='samplelocations.thing', verbose_name='related thing'),
),
migrations.AddConstraint(
model_name='location_thing_junction',
constraint=models.UniqueConstraint(fields=('location_id', 'thing_id'), name='unique_location_thing'),
),
]
Loading