#DRF Post Form Not Showing Queryset

6 messages · Page 1 of 1 (latest)

wicked idol
#

View:

def get_serializer(self, *args, **kwargs):
        kwargs.setdefault('context', self.get_serializer_context())
        serializer = super().get_serializer(*args, **kwargs)
        if self.request.user.is_authenticated:
            npc_qs = NPC.objects.filter(Owner=self.request.user)
            print("get_serializer: setting NPCs queryset to", npc_qs)
            if hasattr(serializer, 'child'):
                serializer.child.fields['NPCs'].queryset = npc_qs
            else:
                serializer.fields['NPCs'].queryset = npc_qs
        else:
            print("get_serializer: no authenticated user, setting NPCs queryset to none")
            if hasattr(serializer, 'child'):
                serializer.child.fields['NPCs'].queryset = NPC.objects.none()
            else:
                serializer.fields['NPCs'].queryset = NPC.objects.none()
        return serializer

#

(part of) Output

get_serializer: setting NPCs queryset to <QuerySet [<NPC: NPC object (1)>]>
#

Serializer

class LoreSerializer(serializers.ModelSerializer):
    NPCs = serializers.PrimaryKeyRelatedField(
        many=True,
        queryset=NPC.objects.none(),  # default empty
        required=False
    )

    def to_representation(self, instance):
        print("TO REP")
        rep = super().to_representation(instance)
        print("Serialized NPCs queryset:", self.fields['NPCs'].queryset)
        return rep

    def save(self, *args, **kwargs):
        is_global = self.validated_data.get('IsGlobal', False)

        # Save the instance first
        instance = super().save(*args, **kwargs)

        # If global, clear NPCs M2M relation on the saved instance
        if is_global:
            instance.NPCs.clear()

        return instance

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        request = self.context.get('request', None)
        if request and request.user.is_authenticated:
            self.fields['NPCs'].queryset = NPC.objects.filter(Owner=request.user)
            print("set queryset", self.fields['NPCs'].queryset)
        else:
            self.fields['NPCs'].queryset = NPC.objects.none()

    class Meta:
        model = Lore
        fields = '__all__'
#

note: "TO REP" doesn't print

atomic escarp
wicked idol