forked from github/plane
enhancement: label sort order (#2763)
* chore: label sort ordering * dev: ordering * fix: sort order * fix: save of labels * dev: remove ordering by name --------- Co-authored-by: NarayanBavisetti <narayan3119@gmail.com>
This commit is contained in:
parent
7f42566207
commit
8cbe9c26fc
@ -753,8 +753,8 @@ class LabelViewSet(BaseViewSet):
|
||||
.select_related("project")
|
||||
.select_related("workspace")
|
||||
.select_related("parent")
|
||||
.order_by("name")
|
||||
.distinct()
|
||||
.order_by("sort_order")
|
||||
)
|
||||
|
||||
|
||||
|
@ -0,0 +1,33 @@
|
||||
# Generated by Django 4.2.5 on 2023-11-13 15:07
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import uuid
|
||||
import random
|
||||
|
||||
|
||||
def random_sort_ordering(apps, schema_editor):
|
||||
Label = apps.get_model("db", "Label")
|
||||
|
||||
bulk_labels = []
|
||||
for label in Label.objects.all():
|
||||
label.sort_order = random.randint(0,65535)
|
||||
bulk_labels.append(label)
|
||||
|
||||
Label.objects.bulk_update(bulk_labels, ["sort_order"], batch_size=1000)
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("db", "0046_alter_analyticview_created_by_and_more"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="label",
|
||||
name="sort_order",
|
||||
field=models.FloatField(default=65535),
|
||||
),
|
||||
migrations.RunPython(random_sort_ordering)
|
||||
]
|
@ -431,6 +431,7 @@ class Label(ProjectBaseModel):
|
||||
name = models.CharField(max_length=255)
|
||||
description = models.TextField(blank=True)
|
||||
color = models.CharField(max_length=255, blank=True)
|
||||
sort_order = models.FloatField(default=65535)
|
||||
|
||||
class Meta:
|
||||
unique_together = ["name", "project"]
|
||||
@ -439,6 +440,18 @@ class Label(ProjectBaseModel):
|
||||
db_table = "labels"
|
||||
ordering = ("-created_at",)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if self._state.adding:
|
||||
# Get the maximum sequence value from the database
|
||||
last_id = Label.objects.filter(project=self.project).aggregate(
|
||||
largest=models.Max("sort_order")
|
||||
)["largest"]
|
||||
# if last_id is not None
|
||||
if last_id is not None:
|
||||
self.sort_order = last_id + 10000
|
||||
|
||||
super(Label, self).save(*args, **kwargs)
|
||||
|
||||
def __str__(self):
|
||||
return str(self.name)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user