Я заранее прошу прощения за глупый вопрос.:)
Я пытаюсь создать REST API с помощью rest-framework Django.Этот API находится поверх алгоритма, который я пытался интегрировать в инфраструктуру Django, но это расстраивает, чтобы сделать это должным образом, и я подозреваю, что это из-за моего плохого понимания Django.
Здесьмои фрагменты кода.
models.py
from django.db import models
class my_model(models.Model):
dob = models.TextField()
response = models.TextField()
field1 = models.TextField()
class Meta:
ordering = ('dob','response','field1')
serializers.py
import re
import numpy as np
from django_rest.quickstart.models import my_model
from rest_framework import serializers
from rest_framework.renderers import JSONRenderer
from my_algorithm import my_algorithm
class myAlgorithmSerializer(serializers.ModelSerializer):
my_algorithm_instance = my_algorithm()
response = serializers.SerializerMethodField('myAlgorithm_wrapper',my_algorithm_instance)
field1 = serializers.SerializerMethodField('field1_wrapper', my_algorithm_instance)
def myAlgorithm_wrapper(self, my_model, my_algorithm_instance):
# Get the inputs.
dob = str(my_model.dob)
components = np.array(re.split('/| |:', dob)).astype(int)
birth_day = components[0]
birth_month = components[1]
birth_year = components[2]
birth_hour = components[3]
birth_minutes = components[4]
my_algorithm_instance.set_birthdate_time(\
birth_year, birth_month, birth_day,\
birth_hour, birth_minutes)
my_algorithm_instance.run()
my_structure = my_algorithm_instance.my_struct
content = JSONRenderer().render(my_structure)
return(content)
def field1_wrapper(self, my_model, my_algorithm_instance):
another_structure = my_algorithm_instance.another_pillar_struct
content = JSONRenderer().render(another_structure)
return(content)
class Meta:
model = Bazhi
fields = ('dob', 'response', 'field1')
Я получаю сообщение об ошибке, которое по существу говорит о том, что методы myAlgorithm_wrapperа 'field1_wrapper' принимает только 2 аргумента, а не обязательные 3. Мой экземпляр алгоритма требуется в обеих оболочках, но даже если они должны быть в рамках этих методов, они сообщаются как «отсутствующие».Трассировка стека ниже.
Traceback (most recent call last):
File "/home/pi/myAlgorithm/lib/python3.5/site-packages/django/utils/autoreload.py", line 225, in wrapper
fn(*args, **kwargs)
File "/home/pi/myAlgorithm/lib/python3.5/site-packages/django/core/management/commands/runserver.py", line 117, in inner_run
self.check(display_num_errors=True)
File "/home/pi/myAlgorithm/lib/python3.5/site-packages/django/core/management/base.py", line 379, in check
include_deployment_checks=include_deployment_checks,
File "/home/pi/myAlgorithm/lib/python3.5/site-packages/django/core/management/base.py", line 366, in _run_checks
return checks.run_checks(**kwargs)
File "/home/pi/myAlgorithm/lib/python3.5/site-packages/django/core/checks/registry.py", line 71, in run_checks
new_errors = check(app_configs=app_configs)
File "/home/pi/myAlgorithm/lib/python3.5/site-packages/django/core/checks/urls.py", line 40, in check_url_namespaces_unique
all_namespaces = _load_all_namespaces(resolver)
File "/home/pi/myAlgorithm/lib/python3.5/site-packages/django/core/checks/urls.py", line 57, in _load_all_namespaces
url_patterns = getattr(resolver, 'url_patterns', [])
File "/home/pi/myAlgorithm/lib/python3.5/site-packages/django/utils/functional.py", line 37, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/home/pi/myAlgorithm/lib/python3.5/site-packages/django/urls/resolvers.py", line 533, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/home/pi/myAlgorithm/lib/python3.5/site-packages/django/utils/functional.py", line 37, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/home/pi/myAlgorithm/lib/python3.5/site-packages/django/urls/resolvers.py", line 526, in urlconf_module
return import_module(self.urlconf_name)
File "/home/pi/myAlgorithm/lib/python3.5/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 673, in exec_module
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "/home/pi/myAlgorithm_app/myAlgorithm/django_rest/urls.py", line 29, in <module>
from django_rest.quickstart import views
File "/home/pi/myAlgorithm_app/myAlgorithm/django_rest/quickstart/views.py", line 8, in <module>
from django_rest.quickstart.serializers import UserSerializer, GroupSerializer, myAlgorithmSerializer
File "/home/pi/myAlgorithm_app/myAlgorithm/django_rest/quickstart/serializers.py", line 25, in <module>
class myAlgorithmSerializer(serializers.ModelSerializer):
File "/home/pi/myAlgorithm_app/myAlgorithm/django_rest/quickstart/serializers.py", line 27, in myAlgorithmSerializer
response = serializers.SerializerMethodField('myAlgorithm_wrapper', my_algorithm_instance)
TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given
Должен ли я включить это в models.py вместо использования менеджера?Документация, кажется, не включает в себя способ получить определенное поле - в моем случае, dob, и обработать его.Даже если этот метод правдоподобен, у меня возникнут проблемы с областью видимости, как в сериализаторе?Любое руководство будет оценено.
Большое спасибо!
Ed