Как вызывать пользовательские функции из models.py django

Я создаю пользовательскую функцию для получения данных из mongodb и хочу увидеть данные, как они выглядят до манипуляции.

Допустим, у меня есть функция, запрашивающая данные из mongodb

Вот как выглядит мой models.py

from bson import json_util
from django.db import models
from django.http import JsonResponse
from pymongo import MongoClient
from bson.json_util import dumps
from bson.json_util import loads
import json
import pymongo

def data_pull(request):
     request_data = request.POST.get('Hello', None) 

if __name__ == "__main__":
    data_pull(request)

для запуска models.py я делаю python models.py из командной строки, но получаю такую ошибку

NameError: имя 'request' не определено

По сути, я хочу протестировать эту data_pull функцию из models.py и посмотреть, как выглядят данные или даже вызов. Как я могу передать этот вызов request в функцию и увидеть вывод из командной строки?

Эта часть вашего кода кажется странной:

if __name__ == "__main__":
    data_pull(request)

Обычно, если вы передаете request в качестве аргумента, вы должны вызвать функцию data_pull() из представления и передать запрос в качестве аргумента в вызове функции.

Вы не можете просто использовать if __name__ == "__main__": и ожидать появления объекта запроса, вам нужно создать его самостоятельно или использовать объект запроса, который создается представлениями (движок django заботится об этом по большей части).

Больше информации в документации: https://docs.djangoproject.com/en/3.2/ref/request-response/#quick-overview


EDIT: если вам нужен объект HttpRequest, это обычно означает, что вам нужны данные, которые отправляются из веб-браузера (данные, которые движок django помещает внутрь request.GET, request.POST и других). Это означает, что вам, вероятно, следует вызывать функцию data_pull() из представления.

Например, этот код в вашем файле 'views' (код из https://docs.djangoproject.com/en/3.2/topics/class-based-views/intro/#using-class-based-views):

from django.http import HttpResponse
from django.views import View

# since you function is declared in 'models', we import it here
from .models import data_pull

class MyView(View):
    def get(self, request):
        # call the function passing request as argument
        data_pull(request)

        return HttpResponse('result')
Вернуться на верх