MAINT: Upgrade to Django 1.11 (#45)
This commit is contained in:
parent
17899ad7c7
commit
a482019a81
15 changed files with 101 additions and 67 deletions
|
@ -38,11 +38,12 @@ router.register(r'species', species_viewsets.SpeciesViewSet)
|
||||||
router.register(r'collection-species',
|
router.register(r'collection-species',
|
||||||
species_viewsets.CollectionSpeciesViewSet)
|
species_viewsets.CollectionSpeciesViewSet)
|
||||||
|
|
||||||
|
app_name = 'api'
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^auth/login/', api_v.Login.as_view()),
|
url(r'^auth/login/', api_v.Login.as_view()),
|
||||||
url(r'^auth/password/reset/confirm/',
|
url(r'^auth/password/reset/confirm/',
|
||||||
api_v.PasswordResetConfirm.as_view()),
|
api_v.PasswordResetConfirm.as_view()),
|
||||||
url(r'^auth/password/reset/', api_v.PasswordReset.as_view()),
|
url(r'^auth/password/reset/', api_v.PasswordReset.as_view()),
|
||||||
url(r'^auth/', include('djoser.urls.authtoken')),
|
url(r'^auth/', include('djoser.urls.authtoken')),
|
||||||
url(r'^v1/', include(router.urls, namespace='v1')),
|
url(r'^v1/', include((router.urls, 'api_v1'), namespace='v1')),
|
||||||
]
|
]
|
||||||
|
|
|
@ -9,43 +9,43 @@ from ccdb.species.models import Species
|
||||||
|
|
||||||
class CollectionFilter(filters.FilterSet):
|
class CollectionFilter(filters.FilterSet):
|
||||||
project = ModelMultipleChoiceFilter(
|
project = ModelMultipleChoiceFilter(
|
||||||
name='project__id',
|
field_name='project__id',
|
||||||
to_field_name='id',
|
to_field_name='id',
|
||||||
queryset=Project.objects.all(),
|
queryset=Project.objects.all(),
|
||||||
)
|
)
|
||||||
|
|
||||||
region = ModelMultipleChoiceFilter(
|
region = ModelMultipleChoiceFilter(
|
||||||
name='study_location__site__region__id',
|
field_name='study_location__site__region__id',
|
||||||
to_field_name='id',
|
to_field_name='id',
|
||||||
queryset=Region.objects.all(),
|
queryset=Region.objects.all(),
|
||||||
)
|
)
|
||||||
|
|
||||||
site = ModelMultipleChoiceFilter(
|
site = ModelMultipleChoiceFilter(
|
||||||
name='study_location__site__id',
|
field_name='study_location__site__id',
|
||||||
to_field_name='id',
|
to_field_name='id',
|
||||||
queryset=Site.objects.all(),
|
queryset=Site.objects.all(),
|
||||||
)
|
)
|
||||||
|
|
||||||
study_location = ModelMultipleChoiceFilter(
|
study_location = ModelMultipleChoiceFilter(
|
||||||
name='study_location__id',
|
field_name='study_location__id',
|
||||||
to_field_name='id',
|
to_field_name='id',
|
||||||
queryset=StudyLocation.objects.all(),
|
queryset=StudyLocation.objects.all(),
|
||||||
)
|
)
|
||||||
|
|
||||||
collection_method = ModelMultipleChoiceFilter(
|
collection_method = ModelMultipleChoiceFilter(
|
||||||
name='collection_method__id',
|
field_name='collection_method__id',
|
||||||
to_field_name='id',
|
to_field_name='id',
|
||||||
queryset=CollectionMethod.objects.all(),
|
queryset=CollectionMethod.objects.all(),
|
||||||
)
|
)
|
||||||
|
|
||||||
adfg_permit = ModelMultipleChoiceFilter(
|
adfg_permit = ModelMultipleChoiceFilter(
|
||||||
name='adfg_permit__id',
|
field_name='adfg_permit__id',
|
||||||
to_field_name='id',
|
to_field_name='id',
|
||||||
queryset=ADFGPermit.objects.all(),
|
queryset=ADFGPermit.objects.all(),
|
||||||
)
|
)
|
||||||
|
|
||||||
species = ModelMultipleChoiceFilter(
|
species = ModelMultipleChoiceFilter(
|
||||||
name='collection_species__species__id',
|
field_name='collection_species__species__id',
|
||||||
to_field_name='id',
|
to_field_name='id',
|
||||||
queryset=Species.objects.all(),
|
queryset=Species.objects.all(),
|
||||||
)
|
)
|
||||||
|
|
|
@ -56,13 +56,17 @@ class ADFGPermit(models.Model):
|
||||||
|
|
||||||
|
|
||||||
class Collection(models.Model):
|
class Collection(models.Model):
|
||||||
project = models.ForeignKey('projects.Project', related_name='collections')
|
project = models.ForeignKey('projects.Project', related_name='collections',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
study_location = models.ForeignKey('locations.StudyLocation',
|
study_location = models.ForeignKey('locations.StudyLocation',
|
||||||
related_name='collections')
|
related_name='collections',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
collection_type = models.ForeignKey(CollectionType,
|
collection_type = models.ForeignKey(CollectionType,
|
||||||
related_name='collections')
|
related_name='collections',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
collection_method = models.ForeignKey(CollectionMethod,
|
collection_method = models.ForeignKey(CollectionMethod,
|
||||||
related_name='collections')
|
related_name='collections',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
number_of_traps = models.IntegerField(blank=True, null=True)
|
number_of_traps = models.IntegerField(blank=True, null=True)
|
||||||
collection_start_date = models.DateField(blank=True, null=True)
|
collection_start_date = models.DateField(blank=True, null=True)
|
||||||
collection_start_time = models.TimeField(blank=True, null=True)
|
collection_start_time = models.TimeField(blank=True, null=True)
|
||||||
|
@ -71,16 +75,21 @@ class Collection(models.Model):
|
||||||
notes = models.TextField(blank=True, null=False)
|
notes = models.TextField(blank=True, null=False)
|
||||||
storage_location = models.ForeignKey('locations.StorageLocation',
|
storage_location = models.ForeignKey('locations.StorageLocation',
|
||||||
blank=True, null=True,
|
blank=True, null=True,
|
||||||
related_name='collections')
|
related_name='collections',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
specimen_state = models.CharField(max_length=50, blank=True)
|
specimen_state = models.CharField(max_length=50, blank=True)
|
||||||
process_type = models.ForeignKey('processing.ProcessType', blank=True,
|
process_type = models.ForeignKey('processing.ProcessType', blank=True,
|
||||||
null=True, related_name='collections')
|
null=True, related_name='collections',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
reagent = models.ForeignKey('processing.Reagent', blank=True, null=True,
|
reagent = models.ForeignKey('processing.Reagent', blank=True, null=True,
|
||||||
related_name='collections')
|
related_name='collections',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
adfg_permit = models.ForeignKey(ADFGPermit, blank=True, null=True,
|
adfg_permit = models.ForeignKey(ADFGPermit, blank=True, null=True,
|
||||||
related_name='collections')
|
related_name='collections',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
collection_flaw = models.ForeignKey(Flaw, blank=True, null=True,
|
collection_flaw = models.ForeignKey(Flaw, blank=True, null=True,
|
||||||
related_name='collections')
|
related_name='collections',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
display_name = models.CharField(max_length=255, editable=False)
|
display_name = models.CharField(max_length=255, editable=False)
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
|
@ -101,13 +110,15 @@ class Collection(models.Model):
|
||||||
|
|
||||||
|
|
||||||
class DatasheetAttachment(models.Model):
|
class DatasheetAttachment(models.Model):
|
||||||
collection = models.ForeignKey(Collection, related_name='datasheets')
|
collection = models.ForeignKey(Collection, related_name='datasheets',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
datasheet = models.FileField("Datasheet",
|
datasheet = models.FileField("Datasheet",
|
||||||
upload_to='collections/datasheets/%Y/%m/%d')
|
upload_to='collections/datasheets/%Y/%m/%d')
|
||||||
|
|
||||||
|
|
||||||
class CollectionTrap(models.Model):
|
class CollectionTrap(models.Model):
|
||||||
collection = models.ForeignKey(Collection, related_name='traps')
|
collection = models.ForeignKey(Collection, related_name='traps',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
number_of_traps = models.IntegerField()
|
number_of_traps = models.IntegerField()
|
||||||
date_opened = models.DateField()
|
date_opened = models.DateField()
|
||||||
time_opened = models.TimeField()
|
time_opened = models.TimeField()
|
||||||
|
@ -126,7 +137,8 @@ class CollectionTrap(models.Model):
|
||||||
|
|
||||||
|
|
||||||
class CollectionMeasurement(models.Model):
|
class CollectionMeasurement(models.Model):
|
||||||
collection = models.ForeignKey(Collection, related_name='env_measurements')
|
collection = models.ForeignKey(Collection, related_name='env_measurements',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
date_measured = models.DateField()
|
date_measured = models.DateField()
|
||||||
time_measured = models.TimeField()
|
time_measured = models.TimeField()
|
||||||
water_temp_c = models.FloatField(null=True)
|
water_temp_c = models.FloatField(null=True)
|
||||||
|
|
|
@ -18,7 +18,8 @@ class Experiment(models.Model):
|
||||||
code = models.CharField(max_length=10, blank=True)
|
code = models.CharField(max_length=10, blank=True)
|
||||||
description = models.CharField(max_length=255, blank=True)
|
description = models.CharField(max_length=255, blank=True)
|
||||||
flaw = models.ForeignKey(Flaw, blank=True, null=True,
|
flaw = models.ForeignKey(Flaw, blank=True, null=True,
|
||||||
related_name='experiments')
|
related_name='experiments',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
sort_order = models.IntegerField(blank=True, null=True)
|
sort_order = models.IntegerField(blank=True, null=True)
|
||||||
collections = models.ManyToManyField('collections_ccdb.Collection')
|
collections = models.ManyToManyField('collections_ccdb.Collection')
|
||||||
|
|
||||||
|
@ -31,7 +32,8 @@ class Experiment(models.Model):
|
||||||
|
|
||||||
|
|
||||||
class ProtocolAttachment(models.Model):
|
class ProtocolAttachment(models.Model):
|
||||||
experiment = models.ForeignKey(Experiment, related_name='protocols')
|
experiment = models.ForeignKey(Experiment, related_name='protocols',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
protocol = models.FileField(upload_to='experiments/protocols/%Y/%m/%d')
|
protocol = models.FileField(upload_to='experiments/protocols/%Y/%m/%d')
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
@ -40,7 +42,8 @@ class ProtocolAttachment(models.Model):
|
||||||
|
|
||||||
class TreatmentType(models.Model):
|
class TreatmentType(models.Model):
|
||||||
experiment = models.ForeignKey(Experiment, blank=True, null=True,
|
experiment = models.ForeignKey(Experiment, blank=True, null=True,
|
||||||
related_name='treatment_types')
|
related_name='treatment_types',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
name = models.CharField(max_length=200)
|
name = models.CharField(max_length=200)
|
||||||
code = models.CharField(max_length=25, blank=True)
|
code = models.CharField(max_length=25, blank=True)
|
||||||
treatment_type = models.CharField(max_length=50, blank=True)
|
treatment_type = models.CharField(max_length=50, blank=True)
|
||||||
|
@ -65,15 +68,20 @@ class TreatmentType(models.Model):
|
||||||
|
|
||||||
class Treatment(models.Model):
|
class Treatment(models.Model):
|
||||||
treatment_type = models.ForeignKey(TreatmentType,
|
treatment_type = models.ForeignKey(TreatmentType,
|
||||||
related_name='treatments')
|
related_name='treatments',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
container = models.ForeignKey('misc.Container', blank=True, null=True,
|
container = models.ForeignKey('misc.Container', blank=True, null=True,
|
||||||
related_name='treatments')
|
related_name='treatments',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
study_location = models.ForeignKey('locations.StudyLocation',
|
study_location = models.ForeignKey('locations.StudyLocation',
|
||||||
related_name='treatments')
|
related_name='treatments',
|
||||||
species = models.ForeignKey('species.Species', related_name='treatments')
|
on_delete=models.CASCADE)
|
||||||
|
species = models.ForeignKey('species.Species', related_name='treatments',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
sex = models.CharField(max_length=25)
|
sex = models.CharField(max_length=25)
|
||||||
flaw = models.ForeignKey(Flaw, blank=True, null=True,
|
flaw = models.ForeignKey(Flaw, blank=True, null=True,
|
||||||
related_name='treatments')
|
related_name='treatments',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
display_name = models.CharField(max_length=255, editable=False)
|
display_name = models.CharField(max_length=255, editable=False)
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
|
@ -93,14 +101,16 @@ class Treatment(models.Model):
|
||||||
|
|
||||||
class TreatmentReplicate(models.Model):
|
class TreatmentReplicate(models.Model):
|
||||||
treatment = models.ForeignKey(Treatment,
|
treatment = models.ForeignKey(Treatment,
|
||||||
related_name='treatment_replicates')
|
related_name='treatment_replicates',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
name = models.CharField(max_length=50)
|
name = models.CharField(max_length=50)
|
||||||
setup_date = models.DateField(blank=True, null=True)
|
setup_date = models.DateField(blank=True, null=True)
|
||||||
setup_time = models.TimeField(blank=True, null=True)
|
setup_time = models.TimeField(blank=True, null=True)
|
||||||
setup_sample_size = models.IntegerField(blank=True, null=True)
|
setup_sample_size = models.IntegerField(blank=True, null=True)
|
||||||
mass_g = models.FloatField(blank=True, null=True)
|
mass_g = models.FloatField(blank=True, null=True)
|
||||||
flaw = models.ForeignKey(Flaw, blank=True, null=True,
|
flaw = models.ForeignKey(Flaw, blank=True, null=True,
|
||||||
related_name='treatment_replicates')
|
related_name='treatment_replicates',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
display_name = models.CharField(max_length=255, editable=False)
|
display_name = models.CharField(max_length=255, editable=False)
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
|
@ -118,13 +128,15 @@ class TreatmentReplicate(models.Model):
|
||||||
|
|
||||||
class AliveDeadCount(models.Model):
|
class AliveDeadCount(models.Model):
|
||||||
treatment_replicate = models.ForeignKey(TreatmentReplicate,
|
treatment_replicate = models.ForeignKey(TreatmentReplicate,
|
||||||
related_name='alive_dead_counts')
|
related_name='alive_dead_counts',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
status_date = models.DateField()
|
status_date = models.DateField()
|
||||||
status_time = models.TimeField(blank=True, null=True)
|
status_time = models.TimeField(blank=True, null=True)
|
||||||
count_alive = models.IntegerField(blank=True, null=True)
|
count_alive = models.IntegerField(blank=True, null=True)
|
||||||
count_dead = models.IntegerField(blank=True, null=True)
|
count_dead = models.IntegerField(blank=True, null=True)
|
||||||
flaw = models.ForeignKey(Flaw, blank=True, null=True,
|
flaw = models.ForeignKey(Flaw, blank=True, null=True,
|
||||||
related_name='alive_dead_counts')
|
related_name='alive_dead_counts',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "{}".format(self.status_date)
|
return "{}".format(self.status_date)
|
||||||
|
|
|
@ -16,7 +16,7 @@ class Region(models.Model):
|
||||||
|
|
||||||
class Site(models.Model):
|
class Site(models.Model):
|
||||||
region = models.ForeignKey(Region, blank=True, null=True,
|
region = models.ForeignKey(Region, blank=True, null=True,
|
||||||
related_name='sites')
|
related_name='sites', on_delete=models.CASCADE)
|
||||||
name = models.CharField(max_length=100)
|
name = models.CharField(max_length=100)
|
||||||
code = models.CharField(max_length=10, blank=True)
|
code = models.CharField(max_length=10, blank=True)
|
||||||
description = models.CharField(max_length=255, blank=True)
|
description = models.CharField(max_length=255, blank=True)
|
||||||
|
@ -46,14 +46,16 @@ class MunicipalLocation(models.Model):
|
||||||
|
|
||||||
|
|
||||||
class StudyLocation(models.Model):
|
class StudyLocation(models.Model):
|
||||||
site = models.ForeignKey(Site, related_name='study_locations')
|
site = models.ForeignKey(Site, related_name='study_locations',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
name = models.CharField(max_length=100)
|
name = models.CharField(max_length=100)
|
||||||
code = models.CharField(max_length=10)
|
code = models.CharField(max_length=10)
|
||||||
study_location_type = models.CharField(max_length=50, blank=True)
|
study_location_type = models.CharField(max_length=50, blank=True)
|
||||||
treatment_type = models.CharField(max_length=100, blank=True)
|
treatment_type = models.CharField(max_length=100, blank=True)
|
||||||
municipal_location = models.ForeignKey(MunicipalLocation,
|
municipal_location = models.ForeignKey(MunicipalLocation,
|
||||||
blank=True, null=True,
|
blank=True, null=True,
|
||||||
related_name='study_locations')
|
related_name='study_locations',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
collecting_location = models.BooleanField(default=False)
|
collecting_location = models.BooleanField(default=False)
|
||||||
description = models.CharField(max_length=255, blank=True)
|
description = models.CharField(max_length=255, blank=True)
|
||||||
sort_order = models.IntegerField(blank=True, null=True)
|
sort_order = models.IntegerField(blank=True, null=True)
|
||||||
|
|
|
@ -25,7 +25,8 @@ class MeasurementType(models.Model):
|
||||||
'MeasurementUnit',
|
'MeasurementUnit',
|
||||||
blank=True,
|
blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
related_name='measurement_types'
|
related_name='measurement_types',
|
||||||
|
on_delete=models.CASCADE,
|
||||||
)
|
)
|
||||||
sort_order = models.IntegerField(blank=True, null=True)
|
sort_order = models.IntegerField(blank=True, null=True)
|
||||||
|
|
||||||
|
@ -71,12 +72,15 @@ class Container(models.Model):
|
||||||
code = models.CharField(max_length=10, blank=True)
|
code = models.CharField(max_length=10, blank=True)
|
||||||
application = models.CharField(max_length=50, blank=True)
|
application = models.CharField(max_length=50, blank=True)
|
||||||
color = models.ForeignKey(Color, blank=True, null=True,
|
color = models.ForeignKey(Color, blank=True, null=True,
|
||||||
related_name='containers')
|
related_name='containers',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
material = models.ForeignKey(Material, blank=True, null=True,
|
material = models.ForeignKey(Material, blank=True, null=True,
|
||||||
related_name='containers')
|
related_name='containers',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
volume = models.FloatField(blank=True, null=True)
|
volume = models.FloatField(blank=True, null=True)
|
||||||
measurement_unit = models.ForeignKey(MeasurementUnit, blank=True,
|
measurement_unit = models.ForeignKey(MeasurementUnit, blank=True,
|
||||||
null=True, related_name='containers')
|
null=True, related_name='containers',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
sort_order = models.IntegerField(blank=True, null=True)
|
sort_order = models.IntegerField(blank=True, null=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
|
|
@ -42,19 +42,24 @@ class Flaw(models.Model):
|
||||||
|
|
||||||
|
|
||||||
class Processing(models.Model):
|
class Processing(models.Model):
|
||||||
process_type = models.ForeignKey(ProcessType, related_name='processings')
|
process_type = models.ForeignKey(ProcessType, related_name='processings',
|
||||||
container = models.ForeignKey('misc.Container', related_name='processings')
|
on_delete=models.CASCADE)
|
||||||
|
container = models.ForeignKey('misc.Container', related_name='processings',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
container_label = models.CharField(max_length=50)
|
container_label = models.CharField(max_length=50)
|
||||||
process_date = models.DateField(blank=True, null=True)
|
process_date = models.DateField(blank=True, null=True)
|
||||||
process_time = models.TimeField(blank=True, null=True)
|
process_time = models.TimeField(blank=True, null=True)
|
||||||
reagent = models.ForeignKey(Reagent, blank=True, null=True,
|
reagent = models.ForeignKey(Reagent, blank=True, null=True,
|
||||||
related_name='processings')
|
related_name='processings',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
reagent_volume = models.FloatField(blank=True, null=True)
|
reagent_volume = models.FloatField(blank=True, null=True)
|
||||||
measurement_unit = models.ForeignKey('misc.MeasurementUnit', blank=True,
|
measurement_unit = models.ForeignKey('misc.MeasurementUnit', blank=True,
|
||||||
null=True, related_name='processings')
|
null=True, related_name='processings',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
minutes_in_reagent = models.IntegerField(blank=True, null=True)
|
minutes_in_reagent = models.IntegerField(blank=True, null=True)
|
||||||
flaw = models.ForeignKey(Flaw, blank=True, null=True,
|
flaw = models.ForeignKey(Flaw, blank=True, null=True,
|
||||||
related_name='processings')
|
related_name='processings',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "{} {} {}".format(self.process_date, self.process_type,
|
return "{} {} {}".format(self.process_date, self.process_type,
|
||||||
|
|
|
@ -32,7 +32,8 @@ class Grant(models.Model):
|
||||||
|
|
||||||
|
|
||||||
class GrantReport(models.Model):
|
class GrantReport(models.Model):
|
||||||
grant = models.ForeignKey(Grant, related_name='reports')
|
grant = models.ForeignKey(Grant, related_name='reports',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
title = models.CharField(max_length=200)
|
title = models.CharField(max_length=200)
|
||||||
report_type = models.CharField(max_length=50, blank=True)
|
report_type = models.CharField(max_length=50, blank=True)
|
||||||
description = models.CharField(max_length=255, blank=True)
|
description = models.CharField(max_length=255, blank=True)
|
||||||
|
|
|
@ -19,8 +19,10 @@ class Species(models.Model):
|
||||||
|
|
||||||
class TrapSpecies(models.Model):
|
class TrapSpecies(models.Model):
|
||||||
collection_trap = models.ForeignKey('collections_ccdb.CollectionTrap',
|
collection_trap = models.ForeignKey('collections_ccdb.CollectionTrap',
|
||||||
related_name='trap_species')
|
related_name='trap_species',
|
||||||
species = models.ForeignKey(Species, related_name='trap_species')
|
on_delete=models.CASCADE)
|
||||||
|
species = models.ForeignKey(Species, related_name='trap_species',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
sex = models.CharField(max_length=25, blank=True)
|
sex = models.CharField(max_length=25, blank=True)
|
||||||
count = models.IntegerField(blank=True, null=True)
|
count = models.IntegerField(blank=True, null=True)
|
||||||
count_estimated = models.BooleanField(default=False)
|
count_estimated = models.BooleanField(default=False)
|
||||||
|
@ -34,8 +36,10 @@ class TrapSpecies(models.Model):
|
||||||
|
|
||||||
class CollectionSpecies(models.Model):
|
class CollectionSpecies(models.Model):
|
||||||
collection = models.ForeignKey('collections_ccdb.Collection',
|
collection = models.ForeignKey('collections_ccdb.Collection',
|
||||||
related_name='collection_species')
|
related_name='collection_species',
|
||||||
species = models.ForeignKey(Species, related_name='collection_species')
|
on_delete=models.CASCADE)
|
||||||
|
species = models.ForeignKey(Species, related_name='collection_species',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
sex = models.CharField(max_length=25, blank=True)
|
sex = models.CharField(max_length=25, blank=True)
|
||||||
count = models.IntegerField(blank=True, null=True)
|
count = models.IntegerField(blank=True, null=True)
|
||||||
count_estimated = models.BooleanField(default=False)
|
count_estimated = models.BooleanField(default=False)
|
||||||
|
|
|
@ -14,7 +14,7 @@ class AdminSection(models.Model):
|
||||||
class AdminEntry(models.Model):
|
class AdminEntry(models.Model):
|
||||||
package = models.CharField(max_length=255)
|
package = models.CharField(max_length=255)
|
||||||
model = models.CharField(max_length=255)
|
model = models.CharField(max_length=255)
|
||||||
section = models.ForeignKey(AdminSection)
|
section = models.ForeignKey(AdminSection, on_delete=models.CASCADE)
|
||||||
sort = models.IntegerField()
|
sort = models.IntegerField()
|
||||||
|
|
||||||
def admin_url(self, request=None):
|
def admin_url(self, request=None):
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.core.urlresolvers import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.test import APITestCase
|
from rest_framework.test import APITestCase
|
||||||
|
|
|
@ -27,14 +27,6 @@ INTERNAL_IPS = ('127.0.0.1', )
|
||||||
|
|
||||||
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
|
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
|
||||||
|
|
||||||
# http://stackoverflow.com/a/28560805/313548
|
|
||||||
class DisableMigrations(object):
|
|
||||||
def __contains__(self, item):
|
|
||||||
return True
|
|
||||||
|
|
||||||
def __getitem__(self, item):
|
|
||||||
return "notmigrations"
|
|
||||||
|
|
||||||
TESTS_IN_PROGRESS = False
|
TESTS_IN_PROGRESS = False
|
||||||
if 'test' in sys.argv[1:] or 'jenkins' in sys.argv[1:]:
|
if 'test' in sys.argv[1:] or 'jenkins' in sys.argv[1:]:
|
||||||
logging.disable(logging.CRITICAL)
|
logging.disable(logging.CRITICAL)
|
||||||
|
@ -44,7 +36,8 @@ if 'test' in sys.argv[1:] or 'jenkins' in sys.argv[1:]:
|
||||||
DEBUG = False
|
DEBUG = False
|
||||||
TEMPLATE_DEBUG = False
|
TEMPLATE_DEBUG = False
|
||||||
TESTS_IN_PROGRESS = True
|
TESTS_IN_PROGRESS = True
|
||||||
MIGRATION_MODULES = DisableMigrations()
|
MIGRATION_MODULES = {app[app.rfind('.') + 1:]: None
|
||||||
|
for app in INSTALLED_APPS}
|
||||||
|
|
||||||
MANIFEST_URL = env('MANIFEST_URL', default=None)
|
MANIFEST_URL = env('MANIFEST_URL', default=None)
|
||||||
CORS_ORIGIN_ALLOW_ALL = False
|
CORS_ORIGIN_ALLOW_ALL = False
|
||||||
|
|
|
@ -4,13 +4,13 @@ from django.conf.urls.static import static
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.views.generic import RedirectView
|
from django.views.generic import RedirectView
|
||||||
from django.views import defaults as default_views
|
from django.views import defaults as default_views
|
||||||
from django.core.urlresolvers import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(settings.ADMIN_URL, include(admin.site.urls)),
|
url(settings.ADMIN_URL, admin.site.urls),
|
||||||
url(r'^api-auth/', include('rest_framework.urls',
|
url(r'^api-auth/', include('rest_framework.urls',
|
||||||
namespace='rest_framework')),
|
namespace='rest_framework')),
|
||||||
url(r'^api/', include('ccdb.api.urls', namespace='api')),
|
url(r'^api/', include('ccdb.api.urls')),
|
||||||
url(r'^$', RedirectView.as_view(url=reverse_lazy('admin:index'),
|
url(r'^$', RedirectView.as_view(url=reverse_lazy('admin:index'),
|
||||||
permanent=True)),
|
permanent=True)),
|
||||||
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
django==1.10.8
|
django==1.11.9
|
||||||
|
|
||||||
# Configuration
|
# Configuration
|
||||||
django-environ==0.4.1
|
django-environ==0.4.1
|
||||||
|
@ -17,8 +17,8 @@ python-dateutil==2.5.3
|
||||||
requests==2.11.0
|
requests==2.11.0
|
||||||
|
|
||||||
# REST
|
# REST
|
||||||
djangorestframework==3.6.4
|
djangorestframework==3.7.7
|
||||||
django-cors-headers==1.3.1
|
django-cors-headers==1.3.1
|
||||||
django-filter==1.1
|
django-filter==1.1
|
||||||
djoser==0.7.0
|
djoser==0.7.0
|
||||||
djangorestframework-jsonapi==2.1.1
|
djangorestframework-jsonapi==2.2.0
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
-r base.txt
|
-r base.txt
|
||||||
|
|
||||||
Werkzeug==0.11.10
|
Werkzeug==0.11.10
|
||||||
django-extensions==1.7.1
|
django-extensions==1.9.9
|
||||||
flake8==3.0.4
|
flake8==3.0.4
|
||||||
pygraphviz==1.3.1
|
pygraphviz==1.3.1
|
||||||
ipython==5.1.0
|
ipython==5.1.0
|
||||||
|
|
Loading…
Add table
Reference in a new issue