include channels details in subscription serializer
This commit is contained in:
parent
709b650f2e
commit
2da4018483
@ -171,16 +171,37 @@ class UniqueContentRuleSerializer(DynamicModelSerializer):
|
|||||||
fields = ("id", "name", "value")
|
fields = ("id", "name", "value")
|
||||||
|
|
||||||
|
|
||||||
|
class DiscordChannelField(serializers.PrimaryKeyRelatedField):
|
||||||
|
def to_internal_value(self, data):
|
||||||
|
try:
|
||||||
|
data = int(data)
|
||||||
|
except (TypeError, ValueError):
|
||||||
|
self.fail("invalid", pk_value=data)
|
||||||
|
|
||||||
|
return super().to_internal_value(data)
|
||||||
|
|
||||||
|
def to_representation(self, value):
|
||||||
|
return str(value.pk)
|
||||||
|
|
||||||
|
|
||||||
|
class NestedDiscordChannelSerializer(DynamicModelSerializer):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = DiscordChannel
|
||||||
|
fields = ("id", "name", "is_nsfw")
|
||||||
|
|
||||||
|
|
||||||
class SubscriptionSerializer(DynamicModelSerializer):
|
class SubscriptionSerializer(DynamicModelSerializer):
|
||||||
filters = serializers.PrimaryKeyRelatedField(
|
filters = serializers.PrimaryKeyRelatedField(
|
||||||
queryset=ContentFilter.objects.all(),
|
queryset=ContentFilter.objects.all(),
|
||||||
many=True
|
many=True
|
||||||
)
|
)
|
||||||
channels = serializers.PrimaryKeyRelatedField(
|
channels = DiscordChannelField(
|
||||||
queryset=DiscordChannel.objects.all(),
|
queryset=DiscordChannel.objects.all(),
|
||||||
many=True
|
many=True
|
||||||
)
|
)
|
||||||
# unique_rules = UniqueContentRuleSerializer(many=True) # TODO: solve? causes issues with submission.
|
channels_detail = serializers.SerializerMethodField()
|
||||||
|
# unique_rules = UniqueContentRuleSerializ er(many=True) # TODO: solve? causes issues with submission.
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Subscription
|
model = Subscription
|
||||||
@ -195,11 +216,18 @@ class SubscriptionSerializer(DynamicModelSerializer):
|
|||||||
"active",
|
"active",
|
||||||
"publish_threshold",
|
"publish_threshold",
|
||||||
"channels",
|
"channels",
|
||||||
|
"channels_detail",
|
||||||
"filters",
|
"filters",
|
||||||
"message_style",
|
"message_style",
|
||||||
"unique_rules"
|
"unique_rules"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def get_channels_detail(self, obj: Subscription):
|
||||||
|
request = self.context.get("request")
|
||||||
|
if request.method == "GET":
|
||||||
|
return NestedDiscordChannelSerializer(obj.channels.all(), many=True).data
|
||||||
|
return []
|
||||||
|
|
||||||
def validate(self, data):
|
def validate(self, data):
|
||||||
server = data.get("server") or self.context.get("server")
|
server = data.get("server") or self.context.get("server")
|
||||||
if not server:
|
if not server:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user