fix(devops): Move software field filter for feature flag to the serializer

ref: #673 #663
This commit is contained in:
2025-03-08 19:30:45 +09:30
parent 7dac29971f
commit 3eb02602d6
3 changed files with 39 additions and 3 deletions

View File

@ -0,0 +1,20 @@
# Generated by Django 5.1.5 on 2025-03-08 09:59
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('devops', '0006_alter_featureflag_software_and_more'),
('itam', '0010_alter_software_organization'),
]
operations = [
migrations.AlterField(
model_name='featureflag',
name='software',
field=models.ForeignKey(help_text='Software this feature flag is for', on_delete=django.db.models.deletion.PROTECT, related_name='feature_flags', to='itam.software', verbose_name='Software'),
),
]

View File

@ -35,9 +35,9 @@ class FeatureFlag(
Software,
blank = False,
help_text = 'Software this feature flag is for',
limit_choices_to = {
'feature_flagging__enabled': True
},
# limit_choices_to = { # bug: returns duplicates
# 'feature_flagging__enabled': True
# },
on_delete = models.PROTECT,
related_name = 'feature_flags',
verbose_name = 'Software',

View File

@ -10,6 +10,7 @@ from devops.models.feature_flag import FeatureFlag
from itam.serializers.software import Software, SoftwareBaseSerializer
class OrganizationField(common.OrganizationField):
def get_queryset(self):
@ -23,6 +24,19 @@ class OrganizationField(common.OrganizationField):
return qs
class SoftwareField(serializers.PrimaryKeyRelatedField):
def get_queryset(self):
qs = Software.objects.filter(
feature_flagging__enabled = True
).distinct()
return qs
class BaseSerializer(serializers.ModelSerializer):
display_name = serializers.SerializerMethodField('get_display_name')
@ -60,6 +74,8 @@ class ModelSerializer(
organization = OrganizationField(required = True)
software = SoftwareField(required = True, write_only = True)
_urls = serializers.SerializerMethodField('get_url')