Django Rest Framework: поиск экземпляра модели с помощью URL-адреса, а не pk (lookup_field, retrievemodelmixin) - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу использовать RetrieveModelMixin.Настройка по умолчанию - поиск с помощью pk, но я хочу найти экземпляр модели с другим полем модели.Тогда как я могу это сделать?Я пытался добавить lookup_fields = 'usename', но это не удалось.

#models.py
    class Profile(models.Model):
    user       = models.OneToOneField(User, on_delete=models.CASCADE, default='', blank=True, null=False)
    username = models.CharField(max_length=100, blank = False, null = True) 
    post = models.ForeignKey(Post, related_name='post', on_delete=models.CASCADE, null =True)
    introduction = models.TextField()


#serializers.py
    class ProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = Profile
        fields = '__all__'
        lookup_fields = 'username'

#urls.py
    path('test/<slug:username>/', views.ProfileDetail.as_view(),name='profiles-detail'),  


#views.py
    class ProfileDetail(mixins.RetrieveModelMixin,
                 mixins.UpdateModelMixin,
                 mixins.DestroyModelMixin,
                 generics.GenericAPIView):

    queryset = Profile.objects.all()
    serializer_class = ProfileSerializer
    lookup_fields = 'username'

    def get(self, request, *args, **kwargs):
        return self.retrieve(request, *args, **kwargs)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)

Это приводит к

Ожидается, что представление ProfileDetail будет вызываться с аргументом ключевого слова URL-адреса с именем "pk".Исправьте ваш URL conf или правильно установите атрибут .lookup_field в представлении.

Как я могу исправить эту ошибку?Спасибо.

1 Ответ

0 голосов
/ 11 февраля 2019

Атрибуты в представлении и сериализаторе называются lookup_field, а не lookup_fields.

...