# This is an auto-generated Django model module. # You'll have to do the following manually to clean this up: # * Rearrange models' order # * Make sure each model has one field with primary_key=True # * Make sure each ForeignKey and OneToOneField has `on_delete` set to the desired behavior # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table # Feel free to rename the models, but don't rename db_table values or field names. from django.db import models class AlembicVersion(models.Model): version_num = models.TextField() class Meta: managed = False db_table = 'alembic_version' class Field(models.Model): id = models.AutoField(primary_key=True) name = models.TextField(blank=True, null=True) class Meta: db_table = 'field' def __str__(self): return self.name def dict(self): return {'id': self.id, 'name': self.name} class FieldsPeople(models.Model): id = models.AutoField(primary_key=True) person = models.ForeignKey('Person', models.DO_NOTHING, blank=True, null=True) field = models.ForeignKey(Field, models.DO_NOTHING, blank=True, null=True) class Meta: db_table = 'fields_people' class Method(models.Model): id = models.AutoField(primary_key=True) name = models.TextField(blank=True, null=True) class Meta: db_table = 'method' def __str__(self): return self.name def dict(self): return {'id': self.id, 'name': self.name} class MethodsPeople(models.Model): id = models.AutoField(primary_key=True) person = models.ForeignKey('Person', models.DO_NOTHING, blank=True, null=True) method = models.ForeignKey(Method, models.DO_NOTHING, blank=True, null=True) class Meta: db_table = 'methods_people' class Language(models.Model): id = models.AutoField(primary_key=True) language = models.TextField(blank=True, null=True) def __str__(self): return self.language class RangeType(models.Model): id = models.AutoField(primary_key=True) range_type = models.TextField(blank=True, null=True) def __str__(self): return self.range_type class Range(models.Model): id = models.AutoField(primary_key=True) source_id = models.IntegerField(blank=True, null=True) gmba_id = models.TextField(blank=True, null=True) name = models.TextField(blank=True, null=True) countries = models.TextField(blank=True, null=True) range_name_map = models.TextField(blank=True, null=True, unique=True) range_name = models.TextField(blank=True, null=True) range_name_ascii = models.TextField(blank=True, null=True) range_name_language = models.ForeignKey(Language, models.DO_NOTHING, blank=True, null=True, to_field='id') mother_range = models.ForeignKey("self", models.DO_NOTHING, blank=True, null=True, to_field='id') feature = models.ForeignKey(RangeType, models.DO_NOTHING, blank=True, null=True, to_field='id') map_unit = models.TextField(blank=True, null=True) level = models.TextField(blank=True, null=True) level_text = models.TextField(blank=True, null=True) level_1 = models.TextField(blank=True, null=True) level_2 = models.TextField(blank=True, null=True) level_3 = models.TextField(blank=True, null=True) latitude = models.TextField(blank=True, null=True) longitude = models.TextField(blank=True, null=True) orogeny = models.TextField(blank=True, null=True) area = models.TextField(blank=True, null=True) GMBA_v1_id = models.TextField(blank=True, null=True) peak_elevation = models.TextField(blank=True, null=True) peak_name = models.TextField(blank=True, null=True) peak_latitude = models.TextField(blank=True, null=True) peak_longitude = models.TextField(blank=True, null=True) comments = models.TextField(blank=True, null=True) checked = models.BooleanField(default=False) source = models.TextField(blank=True, null=True) range_alternate_id = models.TextField(blank=True, null=True) geologic_region = models.TextField(blank=True, null=True) gmba_v2_id = models.TextField(blank=True, null=True) gmba_v2_id_str = models.TextField(blank=True, null=True) wiki_data_id = models.TextField(blank=True, null=True) wiki_data_url = models.TextField(blank=True, null=True) select_300 = models.TextField(blank=True, null=True) gmba_narrow = models.TextField(blank=True, null=True) name_fr = models.TextField(blank=True, null=True) name_de = models.TextField(blank=True, null=True) name_es = models.TextField(blank=True, null=True) name_pt = models.TextField(blank=True, null=True) name_cn = models.TextField(blank=True, null=True) name_ru = models.TextField(blank=True, null=True) name_tr = models.TextField(blank=True, null=True) perimeter = models.TextField(blank=True, null=True) color_all = models.TextField(blank=True, null=True) color_basic = models.TextField(blank=True, null=True) color_300 = models.TextField(blank=True, null=True) elev_low = models.TextField(blank=True, null=True) elev_high = models.TextField(blank=True, null=True) elev_range = models.TextField(blank=True, null=True) elev_avg = models.TextField(blank=True, null=True) class Meta: db_table = 'range' def __str__(self): return self.range_name if self and self.range_name else '--' def dict(self): return { 'id': self.id, 'name': self.range_name, 'gmba_id': self.gmba_id, 'countries': self.countries, } class Resource(models.Model): STAR_CHOICES = ( ("", ""), ("-", "-"), ("*", "*"), ("**", "**"), ("***", "***"), ("****", "****"), ("*****", "*****"), ) TYPE_CHOICES = ( ("" ,"" ), ("Atlas" ,"Atlas" ), ("Book" ,"Book" ), ("Book chapter" ,"Book chapter" ), ("Case study" ,"Case study" ), ("Conservation project","Conservation project"), ("Dataset" ,"Dataset" ), ("Development project" ,"Development project" ), ("Journal article" ,"Journal article" ), ("LTER" ,"LTER" ), ("Map" ,"Map" ), ("Network" ,"Network" ), ("PEGASuS" ,"PEGASuS" ), ("Presentation" ,"Presentation" ), ("Report" ,"Report" ), ("Research project" ,"Research project" ), ("Research Site" ,"Research Site" ), ("Thesis" ,"Thesis" ), ("Video" ,"Video" ), ("Website" ,"Website" ), ("Working Group" ,"Working Group" ), ) id = models.AutoField(primary_key=True) source_id = models.IntegerField(blank=True, null=True) title = models.TextField(blank=True, null=True) url = models.URLField(blank=True, null=True) citation = models.TextField(blank=True, null=True) abstract = models.TextField(blank=True, null=True) type = models.TextField(blank=True, null=True, choices=TYPE_CHOICES) author_keywords = models.TextField(blank=True, null=True) lat = models.TextField(blank=True, null=True) lon = models.TextField(blank=True, null=True) stars = models.TextField(blank=True, null=True, choices=STAR_CHOICES) PEGASuS_Check_map_with_author = models.BooleanField(default=False) PEGASuS_polygon_ID = models.TextField(blank=True, null=True) PEGASuS_Polygon_comments = models.TextField(blank=True, null=True) PEGASuS_Assessment_ID = models.TextField(blank=True, null=True) gloria = models.BooleanField(default=False) gnomo = models.BooleanField(default=False) lter = models.BooleanField(default=False) ltser = models.BooleanField(default=False) miren = models.BooleanField(default=False) team = models.BooleanField(default=False) inventory = models.BooleanField(default=False) doi = models.TextField(blank=True, null=True) wiki_data_id = models.TextField(blank=True, null=True) class Meta: db_table = 'resource' def __str__(self): return self.title def dict(self): return { 'id': self.id, 'title': self.title or '', 'citation': self.citation or '', 'url': self.url or '', 'abstract': self.abstract or '', } class Scale(models.Model): id = models.AutoField(primary_key=True) name = models.TextField(blank=True, null=True) class Meta: db_table = 'scale' def __str__(self): return self.name class Taxon(models.Model): id = models.AutoField(primary_key=True) name = models.TextField(blank=True, null=True) class Meta: db_table = 'taxon' def __str__(self): return self.name def dict(self): return {'id': self.id, 'name': self.name} # LU models class Country(models.Model): id = models.AutoField(primary_key=True) short_name = models.TextField(blank=True, null=True) formal_name = models.TextField(blank=True, null=True) membership_within_un_system = models.TextField(blank=True, null=True) continent = models.TextField(blank=True, null=True) eu_ms = models.TextField(blank=True, null=True) eea_ms = models.TextField(blank=True, null=True) iso3 = models.TextField(blank=True, null=True) iso2 = models.TextField(blank=True, null=True) def __str__(self): return self.short_name if self else '--' class GMBA_SpeciesGroup(models.Model): id = models.AutoField(primary_key=True) species_group = models.TextField(blank=True, null=True) def __str__(self): return self.species_group class PeopleStatus(models.Model): id = models.AutoField(primary_key=True) status = models.TextField(blank=True, null=True) def __str__(self): return self.status class RedListCategory(models.Model): id = models.AutoField(primary_key=True) red_list_category = models.TextField(blank=True, null=True) def __str__(self): return self.red_list_category class TaxonStatus(models.Model): id = models.AutoField(primary_key=True) taxon_status = models.TextField(blank=True, null=True) def __str__(self): return self.taxon_status class TaxonUnit(models.Model): id = models.AutoField(primary_key=True) taxon_unit = models.TextField(blank=True, null=True) def __str__(self): return self.taxon_unit class TrendsQuality(models.Model): id = models.AutoField(primary_key=True) trend = models.TextField(blank=True, null=True) def __str__(self): return self.trend class TrendsQuantity(models.Model): id = models.AutoField(primary_key=True) trend = models.TextField(blank=True, null=True) def __str__(self): return self.trend class Source(models.Model): id = models.AutoField(primary_key=True) source = models.TextField(blank=True, null=True) def __str__(self): return self.source class Repository(models.Model): id = models.AutoField(primary_key=True) repository_name = models.TextField(blank=True, null=True) repository_url = models.TextField(blank=True, null=True) def __str__(self): return '%s --- %s' % (self.repository_name, self.repository_url) class GMBA_function(models.Model): id = models.AutoField(primary_key=True) gmba_function = models.TextField(blank=True, null=True) def __str__(self): return self.gmba_function class Organization(models.Model): CATEGORY_CHOICES = ( ('Independent', 'Independent'), ('Public administration > Research Institution', 'Public administration > Research Institution'), ('Academia > University > Institute', 'Academia > University > Institute'), ('Academia > University', 'Academia > University'), ('Public administration > Other Agency', 'Public administration > Other Agency'), ('Private > NGO (not for profit)', 'Private > NGO (not for profit)'), ('Academia > Academy of Sciences', 'Academia > Academy of Sciences'), ('Academia > Academy of Sciences > Institute', 'Academia > Academy of Sciences > Institute'), ('Public administration > Government', 'Public administration > Government'), ('Intergovernmental Agency > Research Institution', 'Intergovernmental Agency > Research Institution'), ('Intergovernmental Agency', 'Intergovernmental Agency '), ('Private > Research Institution', 'Private > Research Institution'), ('Collection > Museum', 'Collection > Museum'), ('Private > Business', 'Private > Business'), ('Education > Graduate', 'Education > Graduate'), ('Collection > Botanical Garden', 'Collection > Botanical Garden'), ('Other', 'Other'),) org_num1 = models.AutoField(primary_key=True) organisation_search = models.TextField(blank=True, null=True) org_alpha_search = models.TextField(blank=True, null=True) organisation_english = models.TextField(blank=True, null=True) organisation_2 = models.TextField(blank=True, null=True) organisation_3 = models.TextField(blank=True, null=True) organisation_original = models.TextField(blank=True, null=True) acronym = models.TextField(blank=True, null=True) street = models.TextField(blank=True, null=True) po_box = models.TextField(blank=True, null=True) postcode = models.TextField(blank=True, null=True) city = models.TextField(blank=True, null=True) region = models.TextField(blank=True, null=True) search_url = models.TextField(blank=True, null=True) lat_long = models.TextField(blank=True, null=True) url = models.TextField(blank=True, null=True) tel = models.TextField(blank=True, null=True) email = models.TextField(blank=True, null=True) country = models.ForeignKey(Country, models.DO_NOTHING, blank=True, null=True, to_field='id') tags = models.TextField(blank=True, null=True) description = models.TextField(blank=True, null=True) northing = models.TextField(blank=True, null=True) easting = models.TextField(blank=True, null=True) category = models.TextField(blank=True, null=True, choices=CATEGORY_CHOICES) subject = models.TextField(blank=True, null=True) def __str__(self): return self.organisation_english class RangeOnlineInfo(models.Model): id = models.AutoField(primary_key=True) range_name = models.ForeignKey(Range, models.DO_NOTHING, blank=True, null=True, to_field='range_name_map') info_source = models.TextField(blank=True, null=True) url = models.TextField(blank=True, null=True) def __str__(self): return self.range_name class RangeNameTranslation(models.Model): id = models.AutoField(primary_key=True) range_name = models.ForeignKey(Range, models.DO_NOTHING, blank=True, null=True) language_translation = models.ForeignKey(Language, models.DO_NOTHING, blank=True, null=True) range_name_translation = models.TextField(blank=True, null=True) def __str__(self): return '%s - %s' % (self.range_name, self.language_translation.language) class AddElevation(models.Model): id = models.AutoField(primary_key=True) gmba_v2_id = models.TextField(blank=True, null=True) elev_min = models.TextField(blank=True, null=True) elev_max = models.TextField(blank=True, null=True) elev_range = models.TextField(blank=True, null=True) def __str__(self): return '%s - %s' % (self.gmba_v2_id, self.elev_range) class GMBA_V2_Centroid(models.Model): id = models.AutoField(primary_key=True) gridcode = models.TextField(blank=True, null=True) area = models.TextField(blank=True, null=True) latitude = models.TextField(blank=True, null=True) longitude = models.TextField(blank=True, null=True) def __str__(self): return '%s - %s, %s' % (self.gridcode, self.latitude, self.longitude) class ImportGeom210915(models.Model): id = models.AutoField(primary_key=True) gmba_v2_id = models.TextField(blank=True, null=True) area = models.TextField(blank=True, null=True) perimeter = models.TextField(blank=True, null=True) color_all = models.TextField(blank=True, null=True) color_basic = models.TextField(blank=True, null=True) def __str__(self): return self.gmba_v2_id class Keyword(models.Model): keyword_id = models.AutoField(primary_key=True) mother = models.TextField(blank=True, null=True) keyword = models.TextField(blank=True, null=True) def __str__(self): return '%s - %s' % (self.keyword, self.mother) class ResourceKeyword(models.Model): id = models.AutoField(primary_key=True) resource = models.ForeignKey(Resource, models.DO_NOTHING, blank=True, null=True) keyword = models.ForeignKey(Keyword, models.DO_NOTHING, blank=True, null=True, to_field='keyword_id') def __str__(self): return '%s - %s' % (self.resource.title, self.keyword.keyword) class NamesImport(models.Model): id = models.AutoField(primary_key=True) gmba_v2_id = models.TextField(blank=True, null=True) cn = models.TextField(blank=True, null=True) de = models.TextField(blank=True, null=True) es = models.TextField(blank=True, null=True) fr = models.TextField(blank=True, null=True) pt = models.TextField(blank=True, null=True) ru = models.TextField(blank=True, null=True) tr = models.TextField(blank=True, null=True) def __str__(self): return '%s - %s - %s - %s' % (self.gmba_v2_id, self.cn, self.de, self.fr) class ResourceRange(models.Model): id = models.AutoField(primary_key=True) resource_title = models.ForeignKey(Resource, models.DO_NOTHING, blank=True, null=True) range_name = models.ForeignKey(Range, models.DO_NOTHING, blank=True, null=True) def __str__(self): return '%s, %s' % (self.resource_title.title, self.range_name.name) class LanguageLink(models.Model): id = models.AutoField(primary_key=True) language_number_code = models.ForeignKey(Language, models.DO_NOTHING, blank=True, null=True) language_letter_code = models.TextField(blank=True, null=True) def __str__(self): return '%s - %s' % (self.language_number_code.language, self.language_letter_code) class Peak(models.Model): id = models.AutoField(primary_key=True) point_name = models.TextField(blank=True, null=True) latitude = models.TextField(blank=True, null=True) longitude = models.TextField(blank=True, null=True) type = models.TextField(blank=True, null=True) elevation = models.TextField(blank=True, null=True) link = models.TextField(blank=True, null=True) def __str__(self): return self.point_name class Search(models.Model): id = models.AutoField(primary_key=True) range_name = models.ForeignKey(Range, models.DO_NOTHING, blank=True, null=True) repository = models.ForeignKey(Repository, models.DO_NOTHING, blank=True, null=True) search_string = models.TextField(blank=True, null=True) search_date = models.TextField(blank=True, null=True) result = models.TextField(blank=True, null=True) number_of_records = models.TextField(blank=True, null=True) stored = models.TextField(blank=True, null=True) def __str__(self): return self.search_string if self else ' -- ' class Person(models.Model): MR_MRS_CHOICES = ( ('', ''), ('Ms', 'Ms'), ('Ms.', 'Ms.'), ('Mr', 'Mr'), ('Mr.', 'Mr.'), ) GMBA_FUNCTION_CHOICES = ( ('', ''), ('Involved scientist', 'Involved scientist'), ('''Involved scientist Steering committee''', '''Involved scientist Steering committee'''), ('Network', 'Network'), ('Newsletter only', 'Newsletter only'), ('''Steering committee Involved scientist''', '''Steering committee Involved scientist''') ) id = models.AutoField(primary_key=True) source_id = models.IntegerField(blank=True, null=True) title = models.CharField(blank=True, null=True, max_length=255) first_name = models.CharField(blank=True, null=True, max_length=50) last_name = models.CharField(blank=True, null=True, max_length=50) organisation = models.TextField(blank=True, null=True) position = models.CharField(blank=True, null=True, max_length=255) contact_email = models.EmailField(blank=True, null=True) # email_1 personal_url = models.URLField(blank=True, null=True) # url ? biography = models.TextField(blank=True, null=True) field_indexer = models.TextField(db_column='_indexer', blank=True, null=True) # Field renamed because it started with '_'. mr_mrs = models.TextField(blank=True, null=True, choices=MR_MRS_CHOICES) full_name = models.CharField(blank=True, null=True, max_length=100) search_name = models.CharField(blank=True, null=True, max_length=100) email_2 = models.EmailField(blank=True, null=True) skype = models.CharField(blank=True, null=True, max_length=50) professional_phone = models.CharField(blank=True, null=True, max_length=50) mobile_number = models.CharField(blank=True, null=True, max_length=50) url = models.URLField(blank=True, null=True) field_of_expertise = models.TextField(blank=True, null=True) status = models.ForeignKey(PeopleStatus, models.DO_NOTHING, blank=True, null=True, to_field='id') entry_date = models.TextField(blank=True, null=True) gmba_function = models.TextField(blank=True, null=True, choices=GMBA_FUNCTION_CHOICES) news_letter = models.BooleanField(default=False) country = models.ForeignKey(Country, models.DO_NOTHING, blank=True, null=True, to_field='id') organization = models.ForeignKey(Organization, models.DO_NOTHING, blank=True, null=True) birds = models.BooleanField(default=False) mammals = models.BooleanField(default=False) reptiles = models.BooleanField(default=False) amphibians = models.BooleanField(default=False) fish = models.BooleanField(default=False) insects = models.BooleanField(default=False) molluscs = models.BooleanField(default=False) crustaceans = models.BooleanField(default=False) arachnids = models.BooleanField(default=False) angiosperms = models.BooleanField(default=False) gymnosperms = models.BooleanField(default=False) fungi = models.BooleanField(default=False) algae = models.BooleanField(default=False) microbes = models.BooleanField(default=False) biological_field_sampling = models.BooleanField(default=False) data_mining = models.BooleanField(default=False) remote_sensing = models.BooleanField(default=False) gis = models.BooleanField(default=False) spatial_analysis = models.BooleanField(default=False) statistical_analysis = models.BooleanField(default=False) modelling = models.BooleanField(default=False) assessment = models.BooleanField(default=False) meta_analysis = models.BooleanField(default=False) synthesis = models.BooleanField(default=False) qualitative_ssm = models.BooleanField(default=False) #"Qualitative social science methods (interviews, surveys)" genetic_analyses = models.BooleanField(default=False) field_site = models.BooleanField(default=False) transect = models.BooleanField(default=False) mountain_top = models.BooleanField(default=False) mountain_range = models.BooleanField(default=False) landscape = models.BooleanField(default=False) regional = models.BooleanField(default=False) national = models.BooleanField(default=False) _global = models.BooleanField(default=False) geographic_area_of_expertise = models.TextField(blank=True, null=True) profile_on_web = models.BooleanField(default=False) updated = models.BooleanField(default=False) orcid = models.TextField(blank=True, null=True) web_of_science = models.TextField(blank=True, null=True) twitter = models.TextField(blank=True, null=True) instagram = models.TextField(blank=True, null=True) class Meta: db_table = 'person' def get_regional(self): return False def index(self): self.field_indexer = " ".join([ self.first_name, self.last_name, self.organisation, self.position, self.biography ]) return True def fullname(self): return " ".join([self.title, self.first_name, self.last_name]) def __str__(self): return self.fullname() def dict(self): return { 'id': self.id, 'fullname': self.fullname(), 'organisation': self.organisation or '', 'position': self.position or '', 'country': self.country or '', 'personal_url': self.personal_url or '', 'personal_urls': self.personal_url.split(';'), 'biography': self.biography or '', } class TaxaPeople(models.Model): id = models.AutoField(primary_key=True) person = models.ForeignKey(Person, models.DO_NOTHING, blank=True, null=True) taxon = models.ForeignKey('Taxon', models.DO_NOTHING, blank=True, null=True) class Meta: db_table = 'taxa_people' def __str__(self): return self.person.full_name class RangesPeople(models.Model): id = models.AutoField(primary_key=True) person = models.ForeignKey(Person, models.DO_NOTHING, blank=True, null=True) range = models.ForeignKey(Range, models.DO_NOTHING, blank=True, null=True) class Meta: db_table = 'ranges_people' def __str__(self): return self.person.full_name class ResourcesPeople(models.Model): id = models.AutoField(primary_key=True) person = models.ForeignKey(Person, models.DO_NOTHING, blank=True, null=True) resource = models.ForeignKey(Resource, models.DO_NOTHING, blank=True, null=True) class Meta: db_table = 'resources_people' def __str__(self): return self.person.full_name class ScalesPeople(models.Model): id = models.AutoField(primary_key=True) person = models.ForeignKey(Person, models.DO_NOTHING, blank=True, null=True) scale = models.ForeignKey(Scale, models.DO_NOTHING, blank=True, null=True) class Meta: db_table = 'scales_people' def __str__(self): return self.person.full_name class Species(models.Model): id = models.AutoField(primary_key=True) scientific_name = models.TextField(blank=True, null=True) _class = models.TextField(blank=True, null=True) english_name = models.TextField(blank=True, null=True) url = models.TextField(blank=True, null=True) def __str__(self): return '%s, %s, %s' % (self.scientific_name, self._class, self.english_name) class PeopleFunction(models.Model): id = models.AutoField(primary_key=True) person = models.ForeignKey(Person, models.DO_NOTHING, blank=True, null=True) function = models.ForeignKey(GMBA_function, models.DO_NOTHING, blank=True, null=True) def __str__(self): return self.person.full_name class SpeciesRange(models.Model): id = models.AutoField(primary_key=True) scientific_name = models.ForeignKey(Species, models.DO_NOTHING, blank=True, null=True) range = models.ForeignKey(Range, models.DO_NOTHING, blank=True, null=True) endemic = models.TextField(blank=True, null=True) source_url = models.TextField(blank=True, null=True) def __str__(self): return self.scientific_name.scientific_name if self and self.scientific_name else ' -- ' class PeopleRange(models.Model): id = models.AutoField(primary_key=True) person = models.ForeignKey(Person, models.DO_NOTHING, blank=True, null=True) range = models.ForeignKey(Range, models.DO_NOTHING, blank=True, null=True) def __str__(self): return str(self.id) class TaxonRange(models.Model): id = models.AutoField(primary_key=True) range = models.ForeignKey(Range, models.DO_NOTHING, blank=True, null=True) taxon = models.TextField(blank=True, null=True) subrange_or_region = models.TextField(blank=True, null=True) taxon_status = models.TextField(blank=True, null=True) distribution = models.TextField(blank=True, null=True) redlist = models.TextField(blank=True, null=True) count_unit = models.TextField(blank=True, null=True) number_of_units = models.TextField(blank=True, null=True) source = models.TextField(blank=True, null=True) remarks = models.TextField(blank=True, null=True) def __str__(self): return self.taxon if self.taxon else '--' class PeopleResource(models.Model): ROLES_CHOICES = ( ('', ''), ('Author', 'Author'), ('Chair', 'Chair'), ('Contributor', 'Contributor'), ('Coordinator', 'Coordinator'), ('Co - Chair', 'Co - Chair'), ('Editor', 'Editor'), ('Head', 'Head'), ('Member', 'Member'), ('Project partner', 'Project partner'), ('SSC', 'SSC'), ) id = models.AutoField(primary_key=True) person = models.ForeignKey(Person, models.DO_NOTHING, blank=True, null=True) resource = models.ForeignKey(Resource, models.DO_NOTHING, blank=True, null=True) role = models.TextField(blank=True, null=True, choices=ROLES_CHOICES) def __str__(self): return self.person.full_name if self.person else ' -- ' class RangeCountry(models.Model): id = models.AutoField(primary_key=True) range = models.ForeignKey(Range, models.DO_NOTHING, blank=True, null=True) country = models.ForeignKey(Country, models.DO_NOTHING, blank=True, null=True) def __str__(self): return '%s --- %s' % (self.range.range_name if self.range else 'None', self.country.short_name if self.country else 'None')