diff --git a/ram/metadata/admin.py b/ram/metadata/admin.py
index 8e5602e..7ac1786 100644
--- a/ram/metadata/admin.py
+++ b/ram/metadata/admin.py
@@ -20,8 +20,8 @@ class PropertyAdmin(admin.ModelAdmin):
@admin.register(Decoder)
class DecoderAdmin(admin.ModelAdmin):
readonly_fields = ("image_thumbnail",)
- list_display = ("__str__", "interface")
- list_filter = ("manufacturer", "interface")
+ list_display = ("__str__", "sound")
+ list_filter = ("manufacturer", "sound")
search_fields = ("name", "manufacturer__name")
diff --git a/ram/metadata/migrations/0008_remove_decoder_interface.py b/ram/metadata/migrations/0008_remove_decoder_interface.py
new file mode 100644
index 0000000..c1372cd
--- /dev/null
+++ b/ram/metadata/migrations/0008_remove_decoder_interface.py
@@ -0,0 +1,18 @@
+# Generated by Django 4.1.2 on 2022-10-31 23:01
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("metadata", "0007_rename_track_scale_tracks"),
+ ("roster", "0013_rollingstock_decoder_interface"),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name="decoder",
+ name="interface",
+ ),
+ ]
diff --git a/ram/metadata/models.py b/ram/metadata/models.py
index 6c89bfd..039ea01 100644
--- a/ram/metadata/models.py
+++ b/ram/metadata/models.py
@@ -66,9 +66,6 @@ class Decoder(models.Model):
limit_choices_to={"category": "model"},
)
version = models.CharField(max_length=64, blank=True)
- interface = models.PositiveSmallIntegerField(
- choices=settings.DECODER_INTERFACES, null=True, blank=True
- )
sound = models.BooleanField(default=False)
image = models.ImageField(upload_to="images/", null=True, blank=True)
diff --git a/ram/portal/templates/page.html b/ram/portal/templates/page.html
index 807d41b..02b8307 100644
--- a/ram/portal/templates/page.html
+++ b/ram/portal/templates/page.html
@@ -102,7 +102,7 @@
- {% if rolling_stock.decoder %}
+ {% if rolling_stock.decoder or rolling_stock.decoder_interface %}
@@ -111,13 +111,19 @@
- Decoder |
+ Interface |
+ {{ rolling_stock.get_decoder_interface_display }} |
+
+ {% if rolling_stock.decoder %}
+
+ Decoder |
{{ rolling_stock.decoder }} |
Address |
{{ rolling_stock.address }} |
+ {% endif %}
{% endif %}
@@ -230,6 +236,10 @@
+
+ Interface |
+ {{ rolling_stock.get_decoder_interface_display }} |
+
Address |
{{ rolling_stock.address }} |
@@ -246,10 +256,6 @@
Version |
{{ rolling_stock.decoder.version }} |
-
- Interface |
- {{ rolling_stock.decoder.get_interface_display }} |
-
Sound |
{{ rolling_stock.decoder.sound | yesno:"Yes,No" }} |
diff --git a/ram/ram/__init__.py b/ram/ram/__init__.py
index 9a58813..9b3fc78 100644
--- a/ram/ram/__init__.py
+++ b/ram/ram/__init__.py
@@ -1,4 +1,4 @@
from ram.utils import git_suffix
-__version__ = "0.0.19"
+__version__ = "0.0.20"
__version__ += git_suffix(__file__)
diff --git a/ram/roster/admin.py b/ram/roster/admin.py
index a12ce43..ba7a916 100644
--- a/ram/roster/admin.py
+++ b/ram/roster/admin.py
@@ -148,6 +148,7 @@ class RollingStockAdmin(admin.ModelAdmin):
"DCC",
{
"fields": (
+ "decoder_interface",
"decoder",
"address",
)
diff --git a/ram/roster/migrations/0013_rollingstock_decoder_interface.py b/ram/roster/migrations/0013_rollingstock_decoder_interface.py
new file mode 100644
index 0000000..d499fcb
--- /dev/null
+++ b/ram/roster/migrations/0013_rollingstock_decoder_interface.py
@@ -0,0 +1,42 @@
+# Generated by Django 4.1 on 2022-10-31 22:27
+
+from django.db import migrations, models
+
+
+def meta_to_roster(apps, schema_editor):
+ model = apps.get_model("roster", "RollingStock")
+
+ for row in model.objects.all():
+ if row.decoder:
+ decoder_interface = row.decoder.interface
+ row.__dict__["decoder_interface"] = decoder_interface
+ row.save(update_fields=["decoder_interface"])
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("roster", "0012_rollingstockjournal"),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name="rollingstock",
+ name="decoder_interface",
+ field=models.PositiveSmallIntegerField(
+ blank=True,
+ choices=[
+ (1, "NEM651"),
+ (2, "NEM652"),
+ (3, "PluX"),
+ (4, "21MTC"),
+ (5, "Next18/Next18S"),
+ ],
+ null=True,
+ ),
+ ),
+ migrations.RunPython(
+ meta_to_roster,
+ reverse_code=migrations.RunPython.noop
+ ),
+ ]
diff --git a/ram/roster/models.py b/ram/roster/models.py
index dae9663..c42234c 100644
--- a/ram/roster/models.py
+++ b/ram/roster/models.py
@@ -3,6 +3,7 @@ import re
from uuid import uuid4
from django.db import models
from django.urls import reverse
+from django.conf import settings
from django.dispatch import receiver
from django.utils.safestring import mark_safe
@@ -87,6 +88,9 @@ class RollingStock(models.Model):
)
scale = models.ForeignKey(Scale, on_delete=models.CASCADE)
sku = models.CharField(max_length=32, blank=True)
+ decoder_interface = models.PositiveSmallIntegerField(
+ choices=settings.DECODER_INTERFACES, null=True, blank=True
+ )
decoder = models.ForeignKey(
Decoder, on_delete=models.CASCADE, null=True, blank=True
)