Как получить подробный объект из 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, но я хочу узнать, есть ли способ получить и обновить документ обычным способом, который используется для реляционных баз данных.