aleks
aleks

Reputation: 207

django rest framework access item by lookup field instead of pk 3.4 DRF

I need to have lookup field in order my frontend sends email which should be deleted but I get item not found. I've researched a lot about this problem but I can't figure out which DRF version what supports.

class EmailReminderSerializer(serializers.ModelSerializer):
    city = serializers.CharField(max_length=255)
    url = serializers.HyperlinkedIdentityField(
        view_name='web:email_reminder-detail',
    )

    class Meta:
        model = EmailReminder
        fields = '__all__'
        extra_kwargs = {
            'url': {'lookup_field': 'email'}
        }

Now I have url but it points to instance pk, not by my desired lookup field. Any suggestions of how it works in 3.4 version or do you have any other solutions to some lower version >=3.0?

Upvotes: 9

Views: 22218

Answers (2)

aleks
aleks

Reputation: 207

Oh okay, I got it. For serialized models you only need lookup_field in your view but for hyperlinked serialized models you need extra_kwargs in serializers plus lookup field in views. Hope it helps someone

Upvotes: 9

ahmohamed
ahmohamed

Reputation: 2970

You should modify the lookup field in your view instead. As shown in DRF docs, you can do the following.

in views.py

from rest_framework import viewsets

class EmailReminderViewSet(viewsets.ModelViewSet):
    serializer_class = TagSerializer
    lookup_field = 'email'

Upvotes: 8

Related Questions