Inside a View when defining serializer I can pass request context from View to form absolute image URL
serializer = GroupMembersSerializer(gm, context={"request": request})
{
"image": "http://hostname/media/group/image.png"
}
I want to send data through websocket from Django signal. But when I am trying code example below my URL only shows relative path
@receiver(signal=post_save, sender=GroupMembers)
def post_save_group_members(instance: GroupMembers, created: bool, *args, **kwargs):
channel_layer = get_channel_layer()
async_to_sync(channel_layer.group_send)(
f"user_{instance.member.id}",
{
'type': 'groupdetails.create',
'message': GroupMembersSerializer(instance).data
})
{
"image": "/media/group/image.png"
}
How do I do it properly so my URL will be absolute?
Edit
class GroupMembersSerializer(serializers.ModelSerializer):
group = GroupSerializer()
class Meta:
model = GroupMembers
fields = "id", "group", "is_muted"
class GroupSerializer(serializers.ModelSerializer):
class Meta:
model = Group
fields = "id", "owner", "name", "description", "image", "is_public"
read_only_fields = "owner",
def upload_path_group_image(instance, filename: str):
extension = filename.split(".")[-1]
today = datetime.today()
year, month = today.year, today.month
return f"groups/{year}/{month}/{uuid4()}.{extension}"
class Group(CoreModel):
owner = models.ForeignKey("user.User", on_delete=models.CASCADE)
name = models.CharField(max_length=100)
description = models.CharField(max_length=256, null=True, blank=True)
image = models.ImageField(
null=True, blank=True, upload_to=upload_path_group_image
)
is_public = models.BooleanField(default=False)
invitation_link = models.CharField(max_length=36, unique=True, default=uuid4)