Имеются модели обьекта
Имеются serializers, которые конвертируюь каждую модель обьекта
Имеются views, где я расписываю методы для каждой модели
Имеются роуты в файле urls.py для каждого обекта
Таблицы в базе данных такого рода:
Category1
Categoy2
Category3
Category4
На данный момент всё работает, но мне бы хотелось, сделать рефакторинг, чтобы сделать urls динамичными и не копировать почти одинаковый url. Чтобы как-то уменьшить строки кода
Как это можно сделать?
models.py:
class Category1(models.Model):
question = models.TextField()
answer = models.TextField()
def __str__(self):
return self.question
class Category2(models.Model):
question = models.TextField()
answer = models.TextField()
def __str__(self):
return self.question
serializers.py:
class Category1Serializer(serializers.ModelSerializer):
class Meta:
model = Category1
fields = '__all__'
class Category2Serializer(serializers.ModelSerializer):
class Meta:
model = Category2
fields = '__all__'
views.py:
class Category1All(APIView):
@staticmethod
def get(request):
cards = Category1.objects.all()
serializer = Category1Serializer(cards, many=True)
return Response(serializer.data)
@staticmethod
def post(request):
serializer = Category1Serializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class Category1Details(APIView):
@staticmethod
def get_object(self, id):
try:
return Category1.objects.get(id=id)
except Category1.DoesNotExist:
return HttpResponse(status=status.HTTP_404_NOT_FOUND)
def get(self, request, id):
question = self.get_object(self, id)
serializer = Category1Serializer(question)
return Response(serializer.data)
class Category2All(APIView):
@staticmethod
def get(request):
cards = Category2.objects.all()
serializer = Category2Serializer(cards, many=True)
return Response(serializer.data)
@staticmethod
def post(request):
serializer = Category2Serializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class Category2Details(APIView):
@staticmethod
def get_object(self, id):
try:
return Category2.objects.get(id=id)
except Category2.DoesNotExist:
return HttpResponse(status=status.HTTP_404_NOT_FOUND)
def get(self, request, id):
question = self.get_object(self, id)
serializer = Category2Serializer(question)
return Response(serializer.data)
urls.py:
# Category 1
path('api/v1/category1/all', Category1All.as_view()),
path('api/v1/category1/<int:id>', Category1Details.as_view()),
# Category 2
path('api/v1/category2/all', Category2All.as_view()),
path('api/v1/category2/<int:id>', Category2Details.as_view()),