Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't identify problem in my serializers.py file

I can't figure out why I'm getting errors. If I don't import the serializers.py file then the error goes (my views don't yet make use of this file).

Serializers.py:

from rest_framework import serializers

# This file is the equivilent of forms.py in that we define models to serialise.

class MerchantSerializer(serializers.Serializer):
    id = serializers.CharField(required=True, max_length=50)
    name = serializers.CharField(required=True, max_length=100)
    logo = serializers.URLField(max_length=250, required=False)

class DataSerializer(serializers.Serializer):
    account_id = serializers.CharField(required=True, max_length=50)
    amount = serializers.IntegerField(required=True, min_value=0)
    created = serializers.DateTimeField()
    currency = serializers.CharField(required=True, max_length=3)
    description = serializers.CharField(required=True, max_length=250)
    id = serializers.CharField(required=True, max_length=50)
    category = serializers.CharField(required=True, max_length=100)
    is_load = serializers.BooleanField()
    settled = serializers.DateTimeField()
    merchant = serializers.ListField(child=MerchantSerializer)

class TransactionSerializer(serializers.Serializer):
    type = serializers.CharField(required=True, max_length=50)
    data = serializers.ListField(child=DataSerializer)

My view isn't doing anything yet. Plan was to just receive some JSon to create my webhook, validate the JSON and then save the data. The JSON contains objects that span several models and the field names won't match the models so I don't think I can use any model serializers.

Views.py:

from django.shortcuts import render
from django.contrib.auth.models import User
from rest_framework import viewsets
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
import json
import datetime
from .models import Transaction
from .serializers import TransactionSerializer

#Enable logging
import logging
logger = logging.getLogger(__name__)

# Create your views here.

@csrf_exempt
def index(request):
    data = json.loads(request.body)

    return render(request, 'template.html', )

Traceback:

python manage.py runserver 80
Watching for file changes with StatReloader
Performing system checks...

Exception in thread django-main-thread:
Traceback (most recent call last):
  File "C:\Users\philip\AppData\Local\Programs\Python\Python38-32\lib\threading.py", line 932, in _bootstrap_inner
    self.run()
  File "C:\Users\philip\AppData\Local\Programs\Python\Python38-32\lib\threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\philip\CodeRepos\MonzoWebHook\venv\lib\site-packages\django\utils\autoreload.py", line 53, in wrapper
    fn(*args, **kwargs)
  File "C:\Users\philip\CodeRepos\MonzoWebHook\venv\lib\site-packages\django\core\management\commands\runserver.py", line 117, in inner_run
    self.check(display_num_errors=True)
  File "C:\Users\philip\CodeRepos\MonzoWebHook\venv\lib\site-packages\django\core\management\base.py", line 392, in check
    all_issues = self._run_checks(
  File "C:\Users\philip\CodeRepos\MonzoWebHook\venv\lib\site-packages\django\core\management\base.py", line 382, in _run_checks
    return checks.run_checks(**kwargs)
  File "C:\Users\philip\CodeRepos\MonzoWebHook\venv\lib\site-packages\django\core\checks\registry.py", line 72, in run_checks
    new_errors = check(app_configs=app_configs)
  File "C:\Users\philip\CodeRepos\MonzoWebHook\venv\lib\site-packages\django\core\checks\urls.py", line 13, in check_url_config
    return check_resolver(resolver)
  File "C:\Users\philip\CodeRepos\MonzoWebHook\venv\lib\site-packages\django\core\checks\urls.py", line 23, in check_resolver
    return check_method()
  File "C:\Users\philip\CodeRepos\MonzoWebHook\venv\lib\site-packages\django\urls\resolvers.py", line 407, in check
    for pattern in self.url_patterns:
  File "C:\Users\philip\CodeRepos\MonzoWebHook\venv\lib\site-packages\django\utils\functional.py", line 48, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "C:\Users\philip\CodeRepos\MonzoWebHook\venv\lib\site-packages\django\urls\resolvers.py", line 588, in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
  File "C:\Users\philip\CodeRepos\MonzoWebHook\venv\lib\site-packages\django\utils\functional.py", line 48, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "C:\Users\philip\CodeRepos\MonzoWebHook\venv\lib\site-packages\django\urls\resolvers.py", line 581, in urlconf_module
    return import_module(self.urlconf_name)
  File "C:\Users\philip\AppData\Local\Programs\Python\Python38-32\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load       
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked       
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "C:\Users\philip\CodeRepos\MonzoWebHook\monzowebhook\urls.py", line 6, in <module>
    import core.views
  File "C:\Users\philip\CodeRepos\MonzoWebHook\core\views.py", line 9, in 
<module>
    from .serializers import TransactionSerializer
  File "C:\Users\philip\CodeRepos\MonzoWebHook\core\serializers.py", line 
10, in <module>
    class DataSerializer(serializers.Serializer):
  File "C:\Users\philip\CodeRepos\MonzoWebHook\core\serializers.py", line 
20, in DataSerializer
    merchant = serializers.ListField(child=MerchantSerializer)
  File "C:\Users\philip\CodeRepos\MonzoWebHook\venv\lib\site-packages\rest_framework\fields.py", line 1646, in __init__
    assert not inspect.isclass(self.child), '`child` has not been instantiated.'
AssertionError: `child` has not been instantiated.

like image 910
rcx935 Avatar asked Sep 01 '25 02:09

rcx935


1 Answers

You need to add parantheses after setting childs.

data = serializers.ListField(child=DataSerializer())

merchant = serializers.ListField(child=MerchantSerializer())

like image 76
engin_ipek Avatar answered Sep 02 '25 15:09

engin_ipek