Получить ошибку для Python Django Rest Framework Code - PullRequest
0 голосов
/ 19 марта 2020

Я новичок в Django в Python. У меня есть python Django проект под названием «corr_end» с приложением в нем «send_values»

Я написал сериализатор, пытаясь сделать методы get / put / post / delete доступными и работая через Postman testing.

Когда я пытаюсь получить метод get, он не работает в Postman и выдает ошибку.

Я ценю любую помощь в этом. Спасибо.

URL: http://127.0.0.1: 8000 / values ​​/ dinos

Ошибка с терминала:

Ошибка с терминала:

Внутренняя ошибка сервера: / values ​​/ dinos TypeError: __init __ () принимает 1 позиционный аргумент, но задано 2 [19 / Mar / 2020 07:02:00] "GET / values ​​/ dinos HTTP / 1.1" 500 63860

Traceback (последний вызов был последним): файл "[отредактировано] /anaconda3/envs/chipseq/lib/python3.6/site-packages/django/core/handlers/ exception.py ", строка 34, во внутреннем файле ответа = get_response (запрос)" [отредактировано] /anaconda3/envs/chipseq/lib/python3.6/site-packages/django/core/handlers/base.py " строка 115 в файле _get_response response = self.process_exception_by_middleware (e, request) "[отредактировано] /anaconda3/envs/chipseq/lib/python3.6/site-packages/django/core/handlers/base.py" , строка 113, в _get_response response = wrapped_callback (запрос, * callback_args, ** callback_kwargs)

Я создал Python пакет 'api' в каталоге send_values ​​с send_v alues_api.py, содержащий сериализатор.

from rest_framework.exceptions import ValidationError
from rest_framework.serializers import ModelSerializer
from rest_framework.viewsets import ModelViewSet
from ..models import Dinosaur

class DinoSerializer(ModelSerializer):
    class Meta:
        model = Dinosaur
        fields = ['name', 'age', 'species']

    def validate(self, userData):
        if not userData['name']:
            print('name is required')
            return ValidationError
        return userData

    def create(self, userData):
        newDinosaur = Dinosaur.objects.create(**userData)
        newDinosaur.save()
        return newDinosaur

    def update(self, existingDinosaur, userData):
        fields = ['name', 'age', 'species']
        for i in fields:
            fieldValue = userData.get(i, getattr(existingDinosaur, i))
            setattr(existingDinosaur, i, fieldValue)
        existingDinosaur.save()
        return existingDinosaur

class DinoViewSet(ModelViewSet):
    serializer_class = DinoSerializer
    http_method_names = ['get', 'post', 'put', 'delete', 'options']
    queryset = Dinosaur.objects.all()

файл models.py:

from django.db import models
from django.utils import timezone

# Create your models here.
class Correlations(models.Model):
    message = models.CharField(max_length=100)
    score = models.TextField()
    executed = models.CharField(max_length=100)
    created_at = models.DateTimeField(default=timezone.now)

class Dinosaur(models.Model):
    age = models.PositiveIntegerField()
    species = models.TextField()
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name

urls.py в send_values:

from .api.send_values_api import DinoViewSet
from django.conf.urls import url

urlpatterns = [
    url('dinos', DinoViewSet),
]

Примечание. Код отсутствует в файле views.py.

1 Ответ

2 голосов
/ 19 марта 2020

ViewSets не совпадают с Views. Вы не можете добавлять их непосредственно в URL, такие как Views. Самое простое решение здесь - использовать routers, например:

from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register(r'dinos', DinoViewSet)

urlpatterns = [
    path('', include(router.urls)),
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...