[Patchew-devel] [PATCH 08/10] models: add property fields to Message

Paolo Bonzini posted 10 patches 6 years ago
There is a newer version of this series
[Patchew-devel] [PATCH 08/10] models: add property fields to Message
Posted by Paolo Bonzini 6 years ago
This is the first step towards storing properties in a single JSON
dictionary, which is simpler now that properties are fewer and smaller
than they used to be.

The related name "properties" has to be freed up for the new field.
---
 api/migrations/0051_auto_20190418_1346.py | 33 +++++++++++++++++++++++
 api/models.py                             |  9 ++++---
 2 files changed, 38 insertions(+), 4 deletions(-)
 create mode 100644 api/migrations/0051_auto_20190418_1346.py

diff --git a/api/migrations/0051_auto_20190418_1346.py b/api/migrations/0051_auto_20190418_1346.py
new file mode 100644
index 0000000..7d57a34
--- /dev/null
+++ b/api/migrations/0051_auto_20190418_1346.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.20 on 2019-04-18 13:46
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import jsonfield.encoder
+import jsonfield.fields
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('api', '0050_populate_project_config'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='message',
+            name='properties',
+            field=jsonfield.fields.JSONField(default={}, dump_kwargs={'cls': jsonfield.encoder.JSONEncoder, 'separators': (',', ':')}, load_kwargs={}),
+        ),
+        migrations.AddField(
+            model_name='project',
+            name='properties',
+            field=jsonfield.fields.JSONField(default={}, dump_kwargs={'cls': jsonfield.encoder.JSONEncoder, 'separators': (',', ':')}, load_kwargs={}),
+        ),
+        migrations.AlterField(
+            model_name='messageproperty',
+            name='message',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='api.Message'),
+        ),
+    ]
diff --git a/api/models.py b/api/models.py
index 512bf50..7c3aefb 100644
--- a/api/models.py
+++ b/api/models.py
@@ -172,6 +172,7 @@ class Project(models.Model):
                                                   "parent_project=NULL"))
     maintainers = models.ManyToManyField(User, blank=True)
     config = jsonfield.JSONField(default={})
+    properties = jsonfield.JSONField(default={})
 
     def __str__(self):
         return self.name
@@ -348,7 +349,7 @@ class MessageManager(models.Manager):
                 return None
         else:
             q = super(MessageManager, self).get_queryset()
-        return q.filter(is_series_head=True).prefetch_related('properties', 'project')
+        return q.filter(is_series_head=True).prefetch_related('messageproperty_set', 'project')
 
     def find_series(self, message_id, project_name=None):
         heads = self.series_heads(project_name)
@@ -510,6 +511,7 @@ class Message(models.Model):
 
     maintainers = jsonfield.JSONField(blank=True, default=[])
     flags = models.CharField(max_length=64, blank=True, default="")
+    properties = jsonfield.JSONField(default={})
 
     def save_mbox(self, mbox_blob):
         save_blob(mbox_blob, self.message_id)
@@ -621,7 +623,7 @@ class Message(models.Model):
                 # The prefetch cache is invalidated, query again
                 all_props = MessageProperty.objects.filter(message=self)
         else:
-            all_props = self.properties.all()
+            all_props = self.messageproperty_set.all()
         r = {}
         for m in all_props:
             r[m.name] = m.value
@@ -783,8 +785,7 @@ class MessageResult(Result):
 
 
 class MessageProperty(models.Model):
-    message = models.ForeignKey('Message', on_delete=models.CASCADE,
-                                related_name='properties')
+    message = models.ForeignKey('Message', on_delete=models.CASCADE)
     name = models.CharField(max_length=256)
     value = jsonfield.JSONField()
 
-- 
2.21.0


_______________________________________________
Patchew-devel mailing list
Patchew-devel@redhat.com
https://www.redhat.com/mailman/listinfo/patchew-devel