Представление API, возвращающее {"detail": "Не найдено". },

class User(models.Model):
user_id = models.CharField(max_length=255, unique=True)
mobile = models.CharField(max_length=12)
first_name = models.CharField(max_length=200, null=True)
last_name = models.CharField(max_length=200, null=True)
profile_image = models.URLField(null=True)
email = models.EmailField(null=True)
posts = models.ManyToManyField('uploads.Posts', related_name='post_user')
created_on = models.DateTimeField(default=timezone.localtime)
updated_on = models.DateTimeField(default=timezone.localtime)
is_deleted = models.BooleanField(default=False)

class Posts(models.Model):
url = models.URLField(null=True)
description = models.TextField()
created_on = models.DateTimeField(default=timezone.localtime)
updated_on = models.DateTimeField(default=timezone.localtime)
is_deleted = models.BooleanField(default=False)

Вот мои модели, я создал сериализатор для Posts и вложил его в UserPostSerializer.

class PostSerializer(serializers.ModelSerializer):
class Meta:
    model = Posts
    exclude = ('id', 'created_on', 'updated_on', 'is_deleted')


class UserPostsSerializer(serializers.ModelSerializer):
    posts = PostSerializer(many=True)

class Meta:
    model = User
    fields = ('user_id', 'posts',)

Однако, когда я создаю представление, подобное этому-

class UserPostsView(generics.ListAPIView):
queryset = User.objects.all()
serializer_class = UserPostsSerializer

def list(self, request, *args, **kwargs):
    queryset = self.get_queryset()
    serializer = self.get_serializer(queryset, many=True)
    response = Response(serializer.data)
    return response

мой API возвращает { "detail": "Not found." }

В идеале, представление должно перечислять всех пользователей вместе с их сообщениями. Что-то вроде:

{
   "user_id": "abcd",
   "url": "http:....com",
   "description": "Lorem ipsum"
}

Проблема заключалась в упорядочивании URL, я назвал это так:

    urlpatterns = [
                   path('list', UserListView.as_view(), name='user list'),
                   path('<str:id>', UserDetailView.as_view(), name='user detail'),
                   path('posts', UserPostsView.as_view(), name='user posts')]

таким образом, он отображал мой запрос на UserDetailView, поскольку < str:id > является всеобъемлющим и вызывался перед 'posts', Django пытался найти пользователя с user_id 'posts'. URL для моего UserPostsView должен был предшествовать URL для моего UserDetailView, например:

   urlpatterns = [
                  path('list', UserListView.as_view(), name='user list'),
                  path('posts', UserPostsView.as_view(), name='user posts'),
                  path('<str:id>', UserDetailView.as_view(), name='user detail')]

Это исправляет ошибку, и я могу видеть данные в требуемом формате.

Вернуться на верх