Django Rest Framework: {"detail": "Не найдено". } используя устаревшую базу данных - PullRequest
0 голосов
/ 22 апреля 2019

rest-framework для создания API, когда я отправляю http://localhost:8888/api/v1/IxtUser/abcd@email.com с помощью почтальона, я получаю {"detail": "Not found."}

abcd@email.com является первичным ключом, и я использую устаревшую базу данных.

** Я уже пытался изменить 'user_id' на models.Emailfield (), ноя все еще получаю ту же ошибку

шансы

В другой конечной точке я пытался отправить http://localhost:8888/api/v1/MCustomerData/celc/ и работает так

{
    "cust_id": "celc",
    "cust_name": "Celcom",
    "cust_country": "Malaysia",
    "cu": "ECM"
}

мой код

модели:

class IxtUser(models.Model):
    user_id = models.CharField(max_length=70, primary_key=True, unique=True)
    user_uuid = models.CharField(max_length=50)
    user_passwd = models.CharField(max_length=50)
    user_fname = models.CharField(max_length=50)
    user_lname = models.CharField(max_length=50)
    user_contact = models.CharField(max_length=15)
    user_cu_id = models.CharField(max_length=30)
    user_cust_id = models.CharField(max_length=30)
    user_asp_id = models.CharField(max_length=30)
    user_join_date = models.DateTimeField(blank=True, null=True)
    user_status = models.SmallIntegerField()
    user_parent = models.SmallIntegerField()
    user_monitor = models.SmallIntegerField()
    role2monitor = models.SmallIntegerField(blank=True, null=True)
    pb_lower_counter = models.CharField(max_length=8)
    is_rootpanel_enable = models.SmallIntegerField()

    def __str__(self):
        return self.user_id

    class Meta:
        managed = False
        db_table = 'ixt_user'

просмотров:

class IxtUserFilter(filters.FilterSet):
    class Meta:
        model = IxtUser
        fields = [
            'user_id', 'user_uuid', 'user_fname', 
            'user_lname', 'user_cu_id', 
            'user_cust_id', 'user_asp_id'
                ]

class IxtUserView(viewsets.ModelViewSet):
    queryset = IxtUser.objects.all()
    serializer_class = IxtUserSerializer
    lookup_field = 'user_id'
    filter_backends = (filters.DjangoFilterBackend,)
    filterset_class = IxtUserFilter
    throttle_classes = (UserRateThrottle,)

    def get(self, request, format=None):
        content = {
            'status': 'request was permitted'
        }
        return Response(content)

URL-адреса:

from rest_framework import routers
...
from user.views import IxtUserView
router = routers.DefaultRouter()

router.register(r'api/v1/IxtUser', IxtUserView)

urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'', include(router.urls)),
    path(r'api/v1/', include('rest_framework.urls', namespace='rest_framework')),
]

1 Ответ

0 голосов
/ 22 апреля 2019

ваше поле lookup_field установлено на идентификатор пользователя.вам нужно получить запрос с user_id, чтобы получить объект.http://localhost:8888/api/v1/IxtUser/1 первичный ключ, не имеющий к этому никакого отношения для получения lookup_field, выполняет всю тяжелую работу.если вы хотите получить объект в поле электронной почты, установите lookup_field в поле электронной почты

...