Представление Django get() принимает 1 позиционный аргумент, но было задано 2

Я делаю API с помощью Django.

Полученные данные хорошо сохраняются в БД, но у меня есть проблема с созданием API.

enter image description here

views.py

from django.shortcuts import render
from rest_framework.response import Response
from .models import ReviewData
from .models import BuildingData
from rest_framework.views import APIView
from .serializers import ReviewSerializer
from .serializers import BuildingSerializer
from django.shortcuts import render, get_object_or_404

class BuildingInfoAPI(APIView):
    def get(request):
        queryset = BuildingData.objects.all()
        serializer = BuildingSerializer(queryset, many=True)
        return Response(serializer.data)
class ReviewListAPI(APIView):
    def get(request):
        queryset = ReviewData.objects.all()
        serializer = ReviewSerializer(queryset, many=True)
        return Response(serializer.data)

urls.py

from django.contrib import admin
from django.urls import path
from crawling_data.views import ReviewListAPI
from crawling_data.views import BuildingInfoAPI

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/buildingdata/', BuildingInfoAPI.as_view()),
    path('api/buildingdata/<slug:slug>/', ReviewListAPI.as_view())
]

serializers.py

from rest_framework import serializers
from .models import ReviewData
from .models import BuildingData

class BuildingSerializer(serializers.ModelSerializer) :
    class Meta :
        model = BuildingData        
        fields = '__all__'

class ReviewSerializer(serializers.ModelSerializer) :
    class Meta :
        model = ReviewData        
        fields = '__all__'

models.py

from django.db import models
import uuid

# Create your models here.
from django.utils.text import slugify

def generate_unique_slug(klass, field):
    origin_slug = slugify(field, allow_unicode=True)
    unique_slug = origin_slug
    numb = 1
    while klass.objects.filter(slug=unique_slug).exists():
        unique_slug = '%s-%d' % (origin_slug, numb)
        numb += 1
    return unique_slug

class BuildingData(models.Model):
    building_name = models.CharField(max_length=50, unique=True)
    slug = models.SlugField(max_length=50, unique=True, allow_unicode=True, default=uuid.uuid1)
    building_loc = models.CharField(max_length=50)
    building_call = models.CharField(max_length=20)
    building_time = models.CharField(max_length=50)

    def save(self, *args, **kwargs):
        if self.slug:  # edit
            if slugify(self.building_name, allow_unicode=True) != self.slug:
                self.slug = generate_unique_slug(BuildingData, self.building_name)
            else:  # create
                self.slug = generate_unique_slug(BuildingData, self.building_name)
            super(BuildingData, self).save(*args, **kwargs)

'''
def save(self, *args, **kwargs):
        self.slug = slugify(self.building_name, allow_unicode=True)
        try:
            return super().save(*args, **kwargs)
        except:
            print(f"the repeated slug is: `{self.slug}`")
            raise 
'''
    
    

    

class ReviewData(models.Model):
    #building = models.ForeignKey(BuildingData, related_name='reviews', on_delete=models.CASCADE, null=False, blank=False)
    building_name = models.CharField(max_length=50)
    review_content = models.TextField()
    star_num = models.FloatField()

Я думаю, что с моделями нет проблем.

Но я не могу найти, что вызывает ошибку get().

И я думаю, что ошибка с(api/buildingdata/) не позволяет делать slug url(api/buildingdata//) страницы. (Пишет, что страница не найдена, когда я ввожу slug url)

Есть ли проблемы с моим кодом?

добавьте параметр self к вашему методу get, как это:def get(self,request) или просто используйте общие представления более понятные и DRY.

Вернуться на верх