diff --git a/fixtures/sample/linktype.json b/fixtures/sample/linktype.json index 059627a6656c1677a55de54db6bd2532983e04d5..b78e54b912701712dab09d0e12613fff3fd9763b 100644 --- a/fixtures/sample/linktype.json +++ b/fixtures/sample/linktype.json @@ -3,104 +3,91 @@ "model": "program.linktype", "pk": 1, "fields": { - "name": "Website", - "type": "website" + "name": "Website" } }, { "model": "program.linktype", "pk": 2, "fields": { - "name": "CBA", - "type": "cba" + "name": "CBA" } }, { "model": "program.linktype", "pk": 3, "fields": { - "name": "Freie Radios Online", - "type": "freie-radios-online" + "name": "Freie Radios Online" } }, { "model": "program.linktype", "pk": 4, "fields": { - "name": "Funkwhale", - "type": "funkwhale" + "name": "Funkwhale" } }, { "model": "program.linktype", "pk": 5, "fields": { - "name": "Mixcloud", - "type": "mixcloud" + "name": "Mixcloud" } }, { "model": "program.linktype", "pk": 6, "fields": { - "name": "SoundCloud", - "type": "soundcloud" + "name": "SoundCloud" } }, { "model": "program.linktype", "pk": 7, "fields": { - "name": "Internet Archive (archive.org)", - "type": "internet-archive" + "name": "Internet Archive (archive.org)" } }, { "model": "program.linktype", "pk": 8, "fields": { - "name": "YouTube", - "type": "youTube" + "name": "YouTube" } }, { "model": "program.linktype", "pk": 9, "fields": { - "name": "Spotify", - "type": "spotify" + "name": "Spotify" } }, { "model": "program.linktype", "pk": 10, "fields": { - "name": "Instagram", - "type": "instagram" + "name": "Instagram" } }, { "model": "program.linktype", "pk": 11, "fields": { - "name": "Facebook", - "type": "facebook" + "name": "Facebook" } }, { "model": "program.linktype", "pk": 12, "fields": { - "name": "Twitter", - "type": "twitter" + "name": "Twitter" } }, { "model": "program.linktype", "pk": 13, "fields": { - "name": "Mastodon", - "type": "mastodon" + "name": "Mastodon" } } ] diff --git a/program/admin.py b/program/admin.py index d936450b8adb936b7d0aaea4062f8a526eed03e4..4dc801a81b991a26105febe9a39c72236eb4170d 100644 --- a/program/admin.py +++ b/program/admin.py @@ -24,7 +24,7 @@ class AdminWithNameSlugIsActive(admin.ModelAdmin): @admin.register(LinkType) class LinkTypeAdmin(admin.ModelAdmin): - list_display = ("name", "type") + list_display = ("name",) @admin.register(License) diff --git a/program/migrations/0078_remove_linktype_type_linktype_is_active_and_more.py b/program/migrations/0078_remove_linktype_type_linktype_is_active_and_more.py new file mode 100644 index 0000000000000000000000000000000000000000..124e927ec30a45f74886e24400d58e27e7232825 --- /dev/null +++ b/program/migrations/0078_remove_linktype_type_linktype_is_active_and_more.py @@ -0,0 +1,55 @@ +# Generated by Django 4.2.6 on 2024-01-31 19:53 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("program", "0077_alter_host_options_alter_note_options_and_more"), + ] + + operations = [ + migrations.RemoveField( + model_name="linktype", + name="type", + ), + migrations.AddField( + model_name="linktype", + name="is_active", + field=models.BooleanField(default=True), + ), + migrations.RemoveField( + model_name="hostlink", + name="type", + ), + migrations.AddField( + model_name="hostlink", + name="type", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="program.linktype" + ), + ), + migrations.RemoveField( + model_name="notelink", + name="type", + ), + migrations.AddField( + model_name="notelink", + name="type", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="program.linktype" + ), + ), + migrations.RemoveField( + model_name="showlink", + name="type", + ), + migrations.AddField( + model_name="showlink", + name="type", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="program.linktype" + ), + ), + ] diff --git a/program/models.py b/program/models.py index 0dc71029728ef5255107e0088f72288c8b8d010b..541a434f9a44092766c65641b634db74242e4b0f 100644 --- a/program/models.py +++ b/program/models.py @@ -183,18 +183,18 @@ class Host(models.Model): class LinkType(models.Model): + is_active = models.BooleanField(default=True) name = models.CharField(max_length=32, help_text="Name of the link type") - type = models.CharField(max_length=32, help_text="Type of the link") class Meta: ordering = ("name",) def __str__(self): - return self.type + return self.name class Link(models.Model): - type = models.CharField(max_length=64) + type = models.ForeignKey(LinkType, default=1, on_delete=models.CASCADE) url = models.URLField() class Meta: diff --git a/program/serializers.py b/program/serializers.py index c349eb2284341a5b642d6fb4258fccb8735f91d6..d5107d0c0ebc2537d87aca0b5a163fff39b0256f 100644 --- a/program/serializers.py +++ b/program/serializers.py @@ -194,7 +194,7 @@ class CategorySerializer(serializers.ModelSerializer): class LinkTypeSerializer(serializers.ModelSerializer): class Meta: model = LinkType - fields = ("id", "name", "type") + fields = ("id", "is_active", "name") class LicenseSerializer(serializers.ModelSerializer): @@ -211,9 +211,11 @@ class LicenseSerializer(serializers.ModelSerializer): class HostLinkSerializer(serializers.ModelSerializer): + type_id = serializers.PrimaryKeyRelatedField(queryset=LinkType.objects.all(), source="type") + class Meta: + fields = ("type_id", "url") model = HostLink - fields = ("type", "url") class PPOIField(serializers.CharField): @@ -450,9 +452,11 @@ class FundingCategorySerializer(serializers.ModelSerializer): class ShowLinkSerializer(serializers.ModelSerializer): + type_id = serializers.PrimaryKeyRelatedField(queryset=LinkType.objects.all(), source="type") + class Meta: model = ShowLink - fields = ("type", "url") + fields = ("type_id", "url") class ShowSerializer(serializers.HyperlinkedModelSerializer): @@ -884,9 +888,11 @@ class TimeSlotSerializer(serializers.ModelSerializer): class NoteLinkSerializer(serializers.ModelSerializer): + type_id = serializers.PrimaryKeyRelatedField(queryset=LinkType.objects.all(), source="type") + class Meta: model = NoteLink - fields = ("type", "url") + fields = ("type_id", "url") tags_json_schema = {"type": "array", "items": {"type": "string"}}