Как получить подробный объект из mongodb, используя классические django urls и представления?

Я работаю над записью журнала доступа к серверу в базу данных mongodb; мне удалось записать журнал доступа к серверу в базу данных mongodb, а также перечислить все записанные журналы с применением django-фильтра в представлении rest api. Но когда я задаюсь вопросом, есть ли возможный способ получить детали журнала, чтобы я мог использовать предоставленный django RetrieveUpdateAPIView.

Я использую djongo и мои лог-модели имеют вид

from djongo import models as mongo_models

class AccessLog(mongo_models.Model):
    _id = mongo_models.ObjectIdField()
    user_id = mongo_models.BigIntegerField(null=True, blank=True)
    user_email = mongo_models.EmailField(null=True, blank=True)
    path = mongo_models.CharField(max_length=1024, blank=True, null=True)
    method = mongo_models.CharField(max_length=10, blank=True, null=True)
    data = mongo_models.TextField(blank=True, null=True)
    ip_address = mongo_models.CharField(max_length=45, null=True, blank=True)
    status_code = mongo_models.IntegerField(null=True, blank=True)
    flag = mongo_models.BooleanField(default=False)
    remarks = mongo_models.TextField(null=True, blank=True)
    created_at = mongo_models.DateTimeField(auto_now_add=True)
    updated_at = mongo_models.DateTimeField(auto_now=True)

И мои просмотры списка журналов

class AccessLogListView(generics.ListAPIView):
    permission_classes = (AccessLogPermissions, )
    filter_backends = [
        filters.SearchFilter,
        DjangoFilterBackend
    ]
    filterset_fields = [
        'user_id',
        'user_email',
        'method',
        'ip_address',
        'status_code',
        'flag',
    ]
    search_fields = [
        'remarks',
    ]
    serializer_class = AccessLogSerializer
    queryset = AccessLog.objects.all()

И мои детальные представления как

class AccessLogUpdateView(generics.RetrieveUpdateAPIView):
    permission_classes = (AccessLogPermissions,)
    lookup_field = '_id'
    serializer_class = AccessLogUpdateSerializer
    queryset = AccessLog.objects.all()

И urls.py как

urlpatterns = [
    path('', views.AccessLogListView.as_view(), name='list-access-log'),
    path('<str:_id>/', views.AccessLogUpdateView.as_view(), name='update-access-log'),
]

Когда я пытаюсь получить по _id, django выбрасывает 404 ошибку. Также, когда я пытаюсь добавить поле _id в представлениях списка в качестве поля фильтра, он выдает ошибку несуществующего поля _id. Можно извлечь url-параметры и сделать запрос непосредственно к базе данных mongo db, но я хочу узнать, есть ли способ получить и обновить документ обычным способом, который используется для реляционных баз данных.

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