allow null for channel_number so we auto assign

This commit is contained in:
dekzter 2025-04-08 17:23:14 -04:00
parent 179e82e00c
commit e31036079e
3 changed files with 12 additions and 8 deletions

View file

@ -127,13 +127,6 @@ class ChannelViewSet(viewsets.ModelViewSet):
serializer_class = ChannelSerializer
permission_classes = [IsAuthenticated]
def get_next_available_channel_number(self, starting_from=1):
used_numbers = set(Channel.objects.all().values_list('channel_number', flat=True))
n = starting_from
while n in used_numbers:
n += 1
return n
@swagger_auto_schema(
method='post',
operation_description="Auto-assign channel_number in bulk by an ordered list of channel IDs.",
@ -208,7 +201,7 @@ class ChannelViewSet(viewsets.ModelViewSet):
if channel_number is None:
provided_number = request.data.get('channel_number')
if provided_number is None:
channel_number = self.get_next_available_channel_number()
channel_number = Channel.get_next_available_channel_number()
else:
try:
channel_number = int(provided_number)

View file

@ -269,6 +269,14 @@ class Channel(models.Model):
def __str__(self):
return f"{self.channel_number} - {self.name}"
@classmethod
def get_next_available_channel_number(cls, starting_from=1):
used_numbers = set(cls.objects.all().values_list('channel_number', flat=True))
n = starting_from
while n in used_numbers:
n += 1
return n
# @TODO: honor stream's stream profile
def get_stream_profile(self):
stream_profile = self.stream_profile

View file

@ -117,6 +117,7 @@ class BulkChannelProfileMembershipSerializer(serializers.Serializer):
#
class ChannelSerializer(serializers.ModelSerializer):
# Show nested group data, or ID
channel_number = serializers.IntegerField(allow_null=True, required=False)
channel_group = ChannelGroupSerializer(read_only=True)
channel_group_id = serializers.PrimaryKeyRelatedField(
queryset=ChannelGroup.objects.all(),
@ -187,6 +188,8 @@ class ChannelSerializer(serializers.ModelSerializer):
def create(self, validated_data):
stream_ids = validated_data.pop('streams', [])
channel_number = validated_data.pop('channel_number', Channel.get_next_available_channel_number())
validated_data["channel_number"] = channel_number
channel = Channel.objects.create(**validated_data)
# Add streams in the specified order