Skip to content

Commit d87289a

Browse files
authored
Tags + SVG Logos + Index Fixes + Browse Fixes (#106)
1 parent 16edab5 commit d87289a

18 files changed

+226
-83
lines changed

.env

Lines changed: 0 additions & 2 deletions
This file was deleted.

dbdb/core/admin.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ class ProgrammingLanguageAdmin(admin.ModelAdmin):
8787
admin.site.register(License, LicenseAdmin)
8888
admin.site.register(OperatingSystem, OperatingSystemAdmin)
8989
admin.site.register(ProgrammingLanguage, ProgrammingLanguageAdmin)
90+
admin.site.register(Tag)
9091
admin.site.register(ProjectType)
9192
admin.site.register(Publication)
9293
#admin.site.register(SuggestedSystem)

dbdb/core/forms.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ class Meta:
248248
'end_year_citations',
249249
'acquired_by',
250250
'acquired_by_citations',
251+
'tags',
251252
'project_types',
252253
'countries',
253254
'former_names',
@@ -299,6 +300,7 @@ class Meta:
299300
'end_year_citations',
300301
'acquired_by',
301302
'acquired_by_citations',
303+
'tags',
302304
'project_types',
303305
'countries',
304306
'former_names',
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Generated by Django 3.1.14 on 2022-06-26 17:44
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('core', '0024_systemversion_twitter_handle'),
10+
]
11+
12+
operations = [
13+
migrations.CreateModel(
14+
name='Tag',
15+
fields=[
16+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
17+
('slug', models.SlugField(unique=True)),
18+
('name', models.CharField(max_length=64)),
19+
('url', models.URLField(blank=True, max_length=512)),
20+
],
21+
options={
22+
'ordering': ('name',),
23+
},
24+
),
25+
migrations.AddField(
26+
model_name='projecttype',
27+
name='description',
28+
field=models.TextField(blank=True, help_text='This field supports Markdown Syntax'),
29+
),
30+
migrations.AddField(
31+
model_name='systemversion',
32+
name='tags',
33+
field=models.ManyToManyField(blank=True, related_name='tags', to='core.Tag', verbose_name='Tag'),
34+
),
35+
]
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 3.1.14 on 2022-06-26 19:11
2+
3+
from django.db import migrations
4+
import easy_thumbnails.fields
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('core', '0025_auto_20220626_1344'),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name='systemversion',
16+
name='logo',
17+
field=easy_thumbnails.fields.ThumbnailerField(blank=True, upload_to='logos/'),
18+
),
19+
]

dbdb/core/models.py

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from django.urls import reverse
1313
from django.utils import timezone
1414
# third-party imports
15-
from easy_thumbnails.fields import ThumbnailerImageField
15+
from easy_thumbnails.fields import ThumbnailerImageField,ThumbnailerField
1616
from django_countries.fields import CountryField
1717

1818

@@ -51,7 +51,6 @@ def __str__(self):
5151
class FeatureOption(models.Model):
5252

5353
feature = models.ForeignKey('Feature', models.CASCADE, related_name='options')
54-
5554
slug = models.SlugField(db_index=True, unique=False)
5655
value = models.CharField(max_length=100)
5756

@@ -63,6 +62,41 @@ def __str__(self):
6362

6463
pass
6564

65+
# ==============================================
66+
# M2MInfoModel
67+
# ==============================================
68+
#class M2MInfoModel(models.Model):
69+
#slug = models.SlugField(unique=True)
70+
#name = models.CharField(max_length=64)
71+
#url = models.URLField(blank=True, max_length=512)
72+
#description = models.TextField(blank=True, help_text='This field supports Markdown Syntax')
73+
74+
#class Meta:
75+
#ordering = ('name',)
76+
#abstract = True
77+
78+
#def __str__(self):
79+
#return self.name
80+
81+
#pass
82+
83+
# ==============================================
84+
# Tag
85+
# ==============================================
86+
class Tag(models.Model):
87+
slug = models.SlugField(unique=True)
88+
name = models.CharField(max_length=64)
89+
url = models.URLField(blank=True, max_length=512)
90+
91+
class Meta:
92+
ordering = ('name',)
93+
94+
95+
def __str__(self):
96+
return self.name
97+
98+
pass
99+
66100
# ==============================================
67101
# License
68102
# ==============================================
@@ -123,6 +157,7 @@ class ProjectType(models.Model):
123157

124158
slug = models.SlugField(unique=True)
125159
name = models.CharField(max_length=32)
160+
description = models.TextField(blank=True, help_text='This field supports Markdown Syntax')
126161

127162
class Meta:
128163
ordering = ('name',)
@@ -351,6 +386,11 @@ class SystemVersion(models.Model):
351386
related_name='version_acquired_bys')
352387

353388
# General Information Fields
389+
tags = models.ManyToManyField(
390+
'Tag', blank=True,
391+
related_name='tags',
392+
verbose_name='Tag')
393+
354394
project_types = models.ManyToManyField(
355395
'ProjectType', blank=True,
356396
related_name='project_types',
@@ -360,7 +400,7 @@ class SystemVersion(models.Model):
360400
blank=True, max_length=500,
361401
help_text="The original organization that developed the DBMS.")
362402

363-
logo = ThumbnailerImageField(
403+
logo = ThumbnailerField(
364404
blank=True, upload_to='logos/')
365405

366406
countries = CountryField(
@@ -413,6 +453,9 @@ def __str__(self):
413453
def get_absolute_url(self):
414454
return reverse('system_revision_view', args=[self.system.slug, self.ver])
415455

456+
def tags_str(self):
457+
return ', '.join( self.tags.values_list('name', flat=True) )
458+
416459
def project_types_str(self):
417460
return ', '.join( self.project_types.values_list('name', flat=True) )
418461

@@ -600,6 +643,7 @@ def written_in_str(self):
600643
'License',
601644
'OperatingSystem',
602645
'ProgrammingLanguage',
646+
'Tag',
603647
'ProjectType',
604648
'Publication',
605649
'SuggestedSystem',

dbdb/core/search_indexes.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,8 @@ class SystemVersionIndex(indexes.SearchIndex, indexes.Indexable):
1212

1313
text = indexes.NgramField(document=True, use_template=True)
1414

15-
created = indexes.DateTimeField(model_attr='created')
1615
letter = indexes.CharField()
17-
logo = indexes.CharField(model_attr='logo')
1816
name = indexes.CharField(model_attr='system__name')
19-
slug = indexes.CharField(model_attr='system__slug')
2017
start_year = indexes.IntegerField(model_attr='start_year', null=True)
2118
end_year = indexes.IntegerField(model_attr='end_year', null=True)
2219

@@ -31,12 +28,18 @@ class SystemVersionIndex(indexes.SearchIndex, indexes.Indexable):
3128
oses = indexes.MultiValueField()
3229
written_langs = indexes.MultiValueField()
3330
supported_langs = indexes.MultiValueField()
31+
tags = indexes.MultiValueField()
3432
project_types = indexes.MultiValueField()
3533
licenses = indexes.MultiValueField()
3634

3735
features = indexes.MultiValueField()
3836
feature_options = indexes.MultiValueField()
3937

38+
# INCLUDE fields
39+
slug = indexes.CharField(model_attr='system__slug', indexed=False)
40+
created = indexes.DateTimeField(model_attr='created', indexed=False)
41+
logo = indexes.CharField(model_attr='logo', indexed=False)
42+
4043
def get_model(self):
4144
return SystemVersion
4245

@@ -126,11 +129,16 @@ def prepare_supported_langs(self, obj):
126129

127130
return values
128131

132+
def prepare_tags(self, obj):
133+
values = list(
134+
obj.tags.values_list('slug', flat=True)
135+
)
136+
return values
137+
129138
def prepare_project_types(self, obj):
130139
values = list(
131140
obj.project_types.values_list('slug', flat=True)
132141
)
133-
134142
return values
135143

136144
def prepare_licenses(self, obj):
@@ -164,7 +172,10 @@ def prepare_feature_options(self, obj):
164172
return values
165173

166174
def prepare_letter(self, obj):
167-
return obj.system.name[0].lower()
175+
letter = obj.system.name[0].lower()
176+
if not letter.isalpha():
177+
letter = '#'
178+
return letter
168179

169180
def prepare_lowercase_name(self, obj):
170181
return obj.system.name.lower().strip()

0 commit comments

Comments
 (0)