diff --git a/CHANGELOG.md b/CHANGELOG.md
index cb93af13..6251d851 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,6 +13,14 @@ Types of changes:
- `Fixed`: for any bug fixes.
- `Security`: in case of vulnerabilities.
+## [x.y.z]
+
+### Added
+
+- Added a new form to update properties of existing transients
+- Form prompts retriggering of updated transients from the relevant stages
+- Added a new migration to record comments on any user-updated properties
+
## [1.12.0]
### Added
diff --git a/app/host/forms.py b/app/host/forms.py
index 9d10600b..2d372382 100644
--- a/app/host/forms.py
+++ b/app/host/forms.py
@@ -49,4 +49,14 @@ class TransientUploadForm(forms.Form):
label='Transient definition table',
required=False,
)
+ update_info = forms.CharField(
+ widget=forms.Textarea(attrs={
+ 'style': 'min-width: 30rem;',
+ 'cols': 100,
+ 'placeholder': 'Identifier, RA, Dec, Redshift, Classification, HostName, HostRA, HostDec, HostRedshift, Global_aperture_a, Global_aperture_b, Global_aperture_theta, Comment'
+ }),
+ label='Transient update table',
+ required=False,
+ )
+
file = forms.FileField(required=False)
diff --git a/app/host/migrations/0051_transient_update_comment_transient_update_fields_and_more.py b/app/host/migrations/0051_transient_update_comment_transient_update_fields_and_more.py
new file mode 100644
index 00000000..7ae87683
--- /dev/null
+++ b/app/host/migrations/0051_transient_update_comment_transient_update_fields_and_more.py
@@ -0,0 +1,23 @@
+# Generated by Django 5.1.14 on 2026-06-23 00:59
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('host', '0050_alter_host_name_alias'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='transient',
+ name='update_comment',
+ field=models.CharField(blank=True, max_length=500, null=True),
+ ),
+ migrations.AddField(
+ model_name='transient',
+ name='update_fields',
+ field=models.CharField(blank=True, max_length=500, null=True),
+ ),
+ ]
diff --git a/app/host/models.py b/app/host/models.py
index 43599689..f0e800bc 100644
--- a/app/host/models.py
+++ b/app/host/models.py
@@ -162,7 +162,9 @@ def validate_name(name):
added_by = models.ForeignKey(User, null=True, blank=True, on_delete=models.SET_NULL)
progress = models.IntegerField(default=0)
software_version = models.CharField(max_length=50, blank=True, null=True)
-
+ update_comment = models.CharField(max_length=500, blank=True, null=True)
+ update_fields = models.CharField(max_length=500, blank=True, null=True)
+
@property
def best_redshift(self):
"""get the best redshift for a transient"""
diff --git a/app/host/templates/host/add_transient.html b/app/host/templates/host/add_transient.html
index c07d72f1..69232e6c 100644
--- a/app/host/templates/host/add_transient.html
+++ b/app/host/templates/host/add_transient.html
@@ -57,7 +57,7 @@
Add Transients
- There are three ways to add transients to the Blast database and trigger their data processing.
+ There are four ways to add or update transients to the Blast database and trigger their data processing.
Click a method below to enter information:
+ {% endif %}
+
{% if defined_transient_names|length %}
The following transients were successfully added to the Blast database:
@@ -170,6 +196,28 @@
Add Transients
{{ form.full_info | as_crispy_field }}
+
+
Update transients by supplying a comma-separated value (CSV) table,
+ where each row defines a transient with the following columns of information:
+ Identifier, RA, Dec, Redshift, Classification, HostName, HostRA, HostDec, HostRedshift, Global_aperture_a, Global_aperture_b, Global_aperture_theta, Comment
+
+
The identifier must match the name of an existing transient in the database.
+
RA/Dec must be decimal degrees.
+
If Blast has not successfully identified a host galaxy and you wish to update any host information, you must provide HostRA and HostDec.
+
If Blast has not successfully identified a host galaxy, you must provide HostRA and HostDec if you wish to input aperture parameters..
+
Global_aperture_a and Global_aperture_b must be in arcseconds.
+
Global_aperture_theta must be in degrees. For a right-handed world coordinate system, theta increases counterclockwise from North (PA=0).
+
The comment field is a brief explanation (500-character max) for why the transient data were updated.
+
Use "None" to indicate data that should not be updated.
+
For a given transient, the "Cutout download" and "Transient MWEBV" tasks must have completed successfully for these updates to be recorded.
+
+
A transient will not be added if the name already exists in the database or if the coordinates are within one arcsecond of an existing transient.